TiDB 数据库笔记(PCAP认证 TiDB 数据库专员 V6 考试复习笔记)
  xZsIlMgZIn6A 2023年11月02日 55 0

TiDB 数据库核心原理与架构笔记

1.功能介绍

  • TiDB Server集群(无状态,不存储数据)

    • 处理客户端发送的sql语句,进行解析编译优化,生成执行计划
    • 如果是insert要将表的数据转换为key和value的形式,向TiKV存储
    • 执行online DDL
    • 每隔十分钟左右进行垃圾回收(GC)将历史版本数据删除
    • 可水平扩展,增强并发处理能力
  • TiKV

    • 存储数据(数据持久化),存储引擎集群,默认创建三副本(只有一个leader可以读写,其他都不可以读写,其他的跟着leader变),高可用性

    • 存region(行存)

      image.png

      • rocksdb单机的Key-Value存储引擎(内部使用这个数据库保障TiKV的数据持久化)
      • rockdbkv(rocksdb实例):将表数据转换为key-value的形式存储在rockdb实例中
      • rockdbraft(rocksdb实例):存储表的增删改等指令
      • Raft协议(保障了三副本的强一致性)
      • MVCC(保障了其他操作可以正常执行,例:读的是修改前的数据)
      • Transaction事务层(支持事务)
      • 算子下推实际上是一个分布式计算的模型
  • TiFlash

    • 存储数据,存储引擎集群
    • 存region(列存,擅长统计分析数据)
    • TiKV行存更多承载在线交易型业务OLTP(事务型)
    • TiFlash更多承载分析型业务OLAP(暴力扫描)
    • HTAP(OLTP,OLAP)支持
    • image.png
  • region : 96M->144M

    • 数据库表切分,分布存储在TiKV
  • PD:PlacementDriver

    • 集群的大脑
    • 存储想要的表在TiKV,TiFlash的对应位置(这些信息叫做:region 的元数据:表在哪些TiKV,TiFlash上分布信息)region与TiKV,TiFlash的对应关系
    • 存储查询每条sql执行的开始时间,结束时间(TSO对时间进行标识,计时器:对一个事务有开始的TSO有结束的TSO)
    • image.png
  • 体系特点:

    • 水平扩容或缩容
    • 金融级高可用
    • 实时HTAP
    • 云原生的分布式数据库
    • 兼容MySQL5.7协议

image.png

  • 题目:

image.png

image.png

2.TiDBServer详情

  • TiDB server 架构

    • image.png

    • 功能: image.png

      • 处理客户端的连接(Protocol Layer)

      • SQL 语句的解析和编译(Parse,Compile)生成执行计划交由Excutor进行执行

        • AST语法树
        • image.png
      • 关系型数据与 KV 的转化

        • 聚簇表:标号+原表主键做主键(主键唯一)

          image.png

          • region(默认大小96M->144M,超出分裂,分布式存储在TiKV中)

            image.png

            image.png

        • 非聚簇表(自动生成主键)

      • SQL 语句的执行

        image.png

        • DistSQL将复杂sql的执行计划转换为单表计算任务组合发送给TiKV,涉及一张表涉及多个region
        • 简单查询,点查走KV就不走DistSQL
        • Transaction将开始时间和结束时间(TSO)发送给PDClient
      • 在线 DDL 的执行

        • image.png
        • 对于整个tidb数据库来说,同一时刻只能有一个TiDBServer做DDL操作(worker)
        • owner执行job,不是固定的,有任期时长,轮换当owner,谁当owner谁复制执行job队列的DDLJob
        • schema load将最新的所有的表信息同步到内部的缓存中,好根据这些信息执行jobqueue里面的job
        • TIKV持久化存储
      • 垃圾回收(定期清理过期版本的数据)

        • GCLifeTime(默认十分钟)保存当前时间到savepoint时间的数据,其他的进行清除
      • 热点小表缓存 V6.0 (cacheTable)进一步热点缓存区

        • image.png

        • 解决数据可能不一致的问题(缓存租约,既存在使用时间,租约时间内,可以读,无法进行写操作)

          image.png

        • 应用:

          • TiDB 对于每张缓存表的大小限制为 64 MB
          • 适用于查询频繁、数据量不大、极少修改的场景
          • 在租约 (tidb_table_cache_lease) 时间内,写操作会被阻塞
          • 当租约到期 (tidb_table_cache_lease) 时,读性能会下降
          • 不支持对缓存表直接做 DDL 操作,需要先关闭
          • 对于表加载较慢或者极少修改的表,可以适当延长 tidb_table_cache_lease 保持读性能稳定
      • TiDB缓存

        • 默认使用TIDB数据库的所有内存

        • 使用场景

        image.png

        • tidb_mem_quota_query限制每条sql占用的缓存

        • oom-action决定超出了上面缓存以后的操作

  • 题目:

image.png

image.png

3.TiKV

  • 概述

    • image.png
  • TiKV 架构和作用

    • RocksDB (单机kvmap)针对 Flash 存储进行优化,延迟极小,使用 LSM 存储引擎。
      • 高性能的 Key-Value 数据库
      • 完善的持久化机制,同时保证性能和安全性
      • 良好的支持范围查询
      • 为需要存储 TB 级别数据到本地 FLASH(固态盘) 或者 RAM 的应用服务器设计
      • 针对存储在高速设备的中小键值进行优化 —可以存储在 FLASH 或者直接存储在内存
      • 性能随 CPU 数量线性提升,对多核系统友好
  • TiKV 数据持久化和读取

    • image.png

      • RSMTree:客户提供(tom,xxx,xxx,xxx,信息)
      • 顺序写
      • SST(键值对存储,key排好序的,找文件时采用二分查找)
      • MenTable,当写的数据大于write_bufffer_size时(写满了后),将数据转存在immutable MenTable中,读时数据永远是最新的
      • immutable MenTable(不可修改),刷到磁盘中,防止写阻塞。(设置write stall=5):当immutable MenTable大于5个时,写会限速(流控)
      • WAL(日志文件)(预写,防丢失)保障事务的原子性和持久性,设置sync_log=true直接压入磁盘,不经过操作系统的缓存,最后会被SST覆盖
      • image.png
        • compaction:当level层数据达到4个时向下压缩到第下一层(压缩,key排好序形成一个SST文件)
        • 只需要一次磁盘IO,一次内存IO,比B+树效率高
        • 读写只需要操作MenTable即可
        • 对写友好,对查询没有那么友好(比B+树查询慢)
    • image.png

      • 每个文件都有一个bloom filter(帮助判断集合中的元素在不在这个文件中,不在肯定不在,在不一定在)
    • 列簇(CF)(rocksdb的数据分片技术)按照不同的属性分配不同的Column Familiy(存的是一类属性)

      • image.png
      • 写入形式:write(cf1,id,name,age)write(cf2,id,addr,tel),如果没有指定分配列簇会自动加入default列簇
      • Column Familiy共享WAL(日志文件不分)
  • TiKV 如何提供 MVCC 和分布式事务支持

    • 事务存储进TiKV
      • image.png
      • 存在时间戳TSO
      • 提交时修改信息和锁信息被写入TiKV中,才被别人感知(乐观锁),默认乐观锁
      • 直接写入TiKV中,被别人感知(悲观锁)
      • 一个TiKV节点中对应三个列簇(cf)(
        • 修改的数据Default:数据会加时间戳,比如:(3_100)
        • 锁信息Lock:只有一把主锁
        • 提交信息Write(包括时间戳 )
      • write 列:当用户写入了一行数据时,如果该行数据长度小于 255 字节,那么会被存储 write 列中,否则的话该行数据会被存入到 default 列中。
      • default 列:用于存储超过 255 字节长度的数据。
      • image.png
        • w(写锁)可以读不能写
        • pk(主锁):只在分布式事务的第一行加锁
        • @1我的主锁在1这,其他行我加是一个主锁指向,随着主锁走的
        • 锁释放:加一行去掉锁的语句(将W改为D),不会删除
    • 分布式事务解决了原子性问题
    • MVCC(多版本并发控制)
      • 增删改是以新值进行添加
      • 可以读取所有历史版本值,包括未提交的值(悲观锁)
      • 不阻塞读,阻塞写操作
      • image.png
  • TiKV 基于 Raft 算法的分布式一致性

    • image.png

      • region超出了分裂,太小合并
      • raft group有三个region
      • multi raft是多个raft group组成
      • candidate (候选者)是由于leader长时间没有统治信息,由follower投票选出来的
      • Raft 算法实现了分布式数据的强一致性
      • 写数据只写leader,leader将指令变成日志的形式,向所有的follower复制,当大多数节点都收到日志,并持久化后,follower会返回append成功的信息给leader后,leader会apply到rocksdb的kv的编程数据中
      • TiKV中超过50000个region后管理成本很高,因为每个region会定期向PD汇报自己的心跳信息,网络压力比较大
    • raft日志复制功能

      • image.png

      • 第一步:propose,操作被leader收到了,leader准备开始同步

      • 第二步:append,将日志写入racksdb中

        • 将写入请求变成一条日志,变成一条写入日志,叫做raft log,存到自己的日志文件里(对TiKV存储在本地的racksdb实例中,专门存raft log)
        • 唯一标识:region号_日志当前序号.log,从标识找到先后顺序,哪个region发出的知道
        • Replicate:将leader的日志分发复制给其他follower所在节点。其他节点持久化到存储中后,会返回响应值(append成功的信息)给leader后,超过一半以上的节点给了回应后,leader会apply到rocksdb的kv的编程数据中
      • 第三步:commited,大多数region表示append成功持久化消息后TiKV会将这条日志取出来,应用转换为数据写在另一个rocksdb中,叫做rocksdbKV

      • 第四步:apply

      • 有两个rocksdb实例,一个是log一个是kv

    • leader选举

      • image.png
      • term:时长不固定
      • election timeout=10s,未发送心跳信息时超过10s后,就认为现在集群就处于没有leader的状态,开始投票选自己,可能会重复选举
      • random election timeout 降低重复选举的概率
      • candidate (候选者)发请求,我要当leader,term大的candidate 成为leader
      • heatbeat time interal = 10s leader固定10s发送心跳信息
      • image.png
  • TiKV 的 Coprocessor(协同处理器,提供算子下推的能力)

    • 数据写入

      • image.png
    • 数据读取(主要解决读取数据时保证是从leader中读)

      • readIndex Read
        • 等读
        • image.png
        • image.png
      • LeaseRead(优化)localRead
      • FollowerRead
        • image.png
        • 和leader中的数据保持线性一致
    • Coprocessor

      • image.png
  • 题目:

image.png

image.png

4.PD(Placement Driver)

  • 描述 PD 的架构与功能

    • image.png
      • PD有三个,有leader,只有leader可以获得TSO
      • 整个集群 TiKV 的元数据存储,region在哪个TIKV上
      • 分配全局 ID 和事务 ID
      • 生成全局时间戳 TSO
      • 收集集群信息进行调度
      • 提供 label, 支持高可用(打标签)
      • 提供 TiDB Dashboard
    • 路由功能
      • image.png
      • 找region在哪个TIKV上
      • TiDBClient缓存TiKVRegion位置,有时不需要从PD中获取Region位置,减轻缓存压力
      • 数据太旧,可能重新访问PD写到TiKVClient
  • 描述 TSO 的分配

    • TSO = physical time + logical time

    • image.png

    • TSO 是64位的整形数

    • TSO 分配

      • image.png
      • 某个时间段有批处理功能
      • 解决IO存储性能瓶颈方法:
        • image.png
          • 磁盘IO变成了3秒一次
          • 将一段时间的TSO放到缓存中TiDBServer各种会话排队来使用
    • 高可用

      • image.png
      • 当leader宕机后,新leader直接跳过这3秒,形成新的TSO来继续分配,保障了高可用性(一个PD宕机后,系统依然可以使用)
      • 增长性可以保障,连续性不能保障
  • 描述 PD 的调度原理

    • image.png

    • PD知道全局的region分布,TiKV会周期性的汇报心跳信息

    • image.png

    • 生成调度注意点:

      • Balance(leader,Region),Hot Region,集群拓扑,缩容,故障恢复,Region merge
  • 描述 label 的作用

    • image.png
      • DC:独立数据中心
      • 12台主机,6个机柜,3个主中心
      • raft协议,多数派原则,如果一个数据中心坏了,有两个主从region坏了,则不可用了
      • region3可用性比较高,region不可用,数据库不可用
      • Region原始分布默认随PD随机分步的
      • PD只能保障同一个TiKV节点上,不会存在一个region的两个节点,region存储是由PD控制的
      • PD按照label 期待的格式进行region的分配,PD使用label 感知region的具体分布
      • image.png
      • 隔离级别设置isolation,表示副本分布
  • 题目:

    image.png

    image.png

5.TiDB 数据库 SQL 执行流程

  • 描述 DML 语句读写流程

    • DML 语句,对表数据修改语句(delete,select,update...)
    • DDL 语句,对表结构修改语句(alert,creat 表...)
    • 读流程
      • image.png
      • 只获取开始时间
    • 写流程
      • image.png
      • 获取开始时间,获取结束时间
      • (用户提交分为两阶段提交)两阶段提交
        • apply将内存中的修改行加锁,修改和锁信息进行持久到TiKV中(leader及其他副本)
        • commit写提交信息,将锁清理掉,去PD节点读取结束TSO
  • 描述执行流程

    • 执行流程
      • image.png
      • 从一个TiDBserver读取ddl数据,从owner的TiDBserver具体执行,不一定是同一个
      • owner会进行选举,轮流做owner
      • Pase解析,compile编译
      • image.png
      • 只读取一行数据,叫做点查(第一行Compile,PointGet)
      • 逻辑优化AST语法树,optimize(优化器)物理优化
      • DML 语句读取的执行
        • image.png
        • backoff说明缓存中数据过期,重新从PD中获取
        • 元数据:表头,列名
        • image.png
          • KV对应点查时
          • DistSQL将复杂的操作转换为单表的操作
          • snapshot快照
        • image.png
          • cop task
          • root task
      • DML 语句写入的执行
        • image.png
        • image.png
        • 解决同key操作冲突的问题,谁获取latch谁执行
      • DDL 语句的执行
        • image.png
        • image.png
  • 题目:

    image.png

    image.png

6.TiDB 数据库 HTAP 概述

  • 描述 HTAP 技术

    • image.png

      • OLTP(高并发) OLAP(暴力扫描)
    • image.png

      • ETL工具将数据抽取
    • image.png

    • HTAP 的基本要求

      • 可扩展性:分布式事务,分布式存储
      • 同时支持 OLTP 与 OLAP:(同时有两种版本)同时支持行存和列存,OLTP与 OLAP 业务隔离
      • 实时性:行存与列存数据实时同步
    • TiDB 的 HTAP 功能特性

      • 行列混合:列存 (TiFlash) 支持基于主键的实时更新,TiFlash 作为列存副本,OLTP 与 OLAP 业务隔离
      • 智能选择 (CBO 自动或者人工选择 )走TiKV还是TiFlash
      • MPP 架构,只能在TiFlash上执行(过滤,聚合,表连接),并行计算
    • MPP

      • image.png

      • 过滤,交换数据,表连接,聚合发生在各个TiFlash上做

      • 并行计算

  • 工作场景

    • image.png
  • image.png

  • 题目:

    image.png image.png

7.TiFlash

  • image.png

    • TiFlash是TiKV的列存版本,数据和分区是一模一样的
    • Reft leaner使用日志异步同步
    • TiFlash只接入日志,没办法写入,只能读,和其他follower一样,从TiKV的leader复制转换来的,对原来性能影响很小,因此做到了业务的隔离性,如果TiFlash宕机后,重新复制即可
    • 存在mvcc快照隔离级别,和TIKV一致性读取
  • TiFlash 主要功能

    • 异步复制(Reft leaner)
      • image.png
    • 一致性读取(mvcc快照隔离级别)
      • 发日志,等待确定后读取
    • 引擎智能选择(可以主动选择使用TiKV还是TiFlash还是混合使用)
    • 计算加速
  • 题目

    image.png

    image.png

8.TiDB 6.0 新特性

  • 了解 Placement Rules in SQL(SQL中的放置规则)(指定表具体放置在哪个节点上)

    • Placement Rules in SQL 之前
      • 跨地域部署的集群,无法本地访问
      • 无法根据业务隔离资源
      • 难以按照业务等级配置资源和副本数
    • Placement Rules in SQL 之后
      • 跨地域部署的集群,支持本地访问
      • 根据业务隔离资源
      • 按照业务等级配置资源和副本数
    • Placement Rules in SQL 的使用 - 步骤
      • 步骤 1:设计业务拓扑, 为不同的 TiKV 实例设置标签
      • 步骤 2:创建 PLACEMENT POLICY(布局规则)
      • 步骤 3:设定数据对象的 PLACEMENT POLICY
    • Placement Rules in SQL 的应用
      • 精细化数据放置,控制本地访问与跨区域访问
      • 指定副本数,提高重要业务的可用性和数据可靠性
      • 将业务按照等级、资源需求或者数据生命周期进行隔离
      • 业务数据整合,降低运维成本与复杂度
  • 描述小表缓存(分布式数据库热点问题,提高小表的吞吐量)

    -image.png

    • 原理:

      • image.png

      • 租约时间(5s)内,无法进行写操作,可读比较快

      • 租约到期,数据过期

        • 写操作不再被阻塞
        • 读,写,直接到 TiKV 节点上执行
      • 数据更新完毕,租约继续开启

    • 应用

      • TiDB 6.0对于每张缓存表的大小限制为 64 MB
      • 适用于查询频繁、数据量不大、极少修改的场景
      • 在租约 (tidb_table_cache_lease) 时间内,写操作会被阻塞,在小表读,性能提高
      • 当租约到期 (tidb_table_cache_lease) 时,到 TiKV读,性能会下降
      • 不支持对缓存表直接做 DDL 操作,需要先关闭
      • 对于表加载较慢或者极少修改的表,可以适当延长
      • tidb_table_cache_lease 保持读性能稳定
  • 描述内存悲观锁(事务性能提升)

    • image.png

    • image.png

    • 使用 -image.png

      • 配置文件
    • 应用

      • 减少事务的延时
      • 降低磁盘和网络贷款
      • 降低 TiKV 的 CPU 消耗
      • 锁丢失问题,锁丢失,事务回滚(缺点)
  • 了解 Top SQL(性能的可观测性:找到某个top5类型的sql,知道哪些sql的消耗(只能)cpu负载/开销是最大的)

image.png

  • 作用:

    • 可视化地展示 CPU 开销最多的 Top 5 类 SQL 语句
    • 支持指定 TiDB server 及 TiKV 实例进行查询
    • 支持统计所有正在执行的 SQL 语句
    • 支持每秒请求数、平均延迟、查询计划等详细执行信息
  • 了解 TiDB Enterprise Manager(TiEM)(企业级的管理平台,图形化流程化)

    • 企业中 TiDB 集群管理的问题
      • 数量增长:集群数量、节点数量、组件数量、工具数量
      • 复杂度增长:配置参数复杂度、命令行复杂度、管理接口复杂
    • 企业中 TiDB 集群管理的任务
      • 部署集群、升级集群、参数管理、组件管理、备份恢复与高可用管理、集群监控与告警、集群日志收集、审计与安全
    • 功能
      • 一键部署集群 & 多套集群一站式管理、集群原地升级、参数管理、克隆集群 & 主备集群切换
  • 题目:

image.png

image.png

9.TiDB Cloud

  • 在Cloud方向考虑为什么选择TiDB

    • image.png
      • 方便横向扩展
        • image.png
        • image.png
      • raft实现高可用性
  • 什么是TiDBCloud

    • image.png

    • IaaS云服务厂商提供的基础硬件设施(服务器...)

    • PaaS云服务厂商提供的基础软件平台设施(操作系统,数据库...)

    • SaaS云服务厂商提供的软件基础设施直接运营即可(论坛软件...)

  • image.png

  • image.png

  • image.png

  • image.png

    • image.png
    • image.png
    • image.png
  • image.png

  • 题目:

image.png

image.png

10.重点资料总结

image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  eo9lmrKcoG9P   2023年12月11日   17   0   0 组播多点HCIP数据
xZsIlMgZIn6A