本文主要是介绍TiDB学习2:TiDB Sever,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
1. TiDB Server架构
2. sql语句的解析和编译
2.1 Parse
编辑 2.2 compile
3. 行转化为KV对(聚簇表)
编辑4. SQL 读写相关模块
4.1 DistSQL(复杂查询)
4.2 KV(简单查询)
5. 在线DDL相关模块
6. GC机制与相关模块
7. TiDB Server的缓存
8. 热点小表缓存
9. 总结
1. TiDB Server架构
- protocol layer:处理客户端的连接
- Parse、Compile:负责sql解析,生成sql执行计划,生成sql执行计划后,Excutor、DistSQL、KV分批的执行sql的执行计划
- Transaction、KV:负责事务相关执行
- PD client:负责与PD,TSO是通过PD Client去和PD进行交互得到
- TiKV Client:负责与TiKV的交互,所有的sql请求都是通过TiKV Client去对TiKV进行交互
- schema、worker、start job:主要负责online DDL,不会阻塞读写
- memBuffer:负责缓存读出来的数据及元数据,登录的认证信息,统计信息等
TiDB Server 主要功能
- 处理客户端的连接(protocol layer)
- SQL语句的解析和编译(Parse、Compile)
- 关系型数据与 KV 的转化
- SQL语句的执行(Excutor)
- Online DDL 的执行(schema load、worker、start job)
- 垃圾回收(GC)
- 热点小表缓存 V6.0(cache table)
2. sql语句的解析和编译
2.1 Parse
2.2 compile
3. 行转化为KV对(聚簇表)
表ID+主键值为KEY,行里面其他值作为Value,存放在region里面
当一个region的大小达到144M时就分裂为两个region,以region为单位就可以分布式的存在各个TiKV Node
4. SQL 读写相关模块
4.1 DistSQL(复杂查询)
执行计划分为两种,第一种是较为复杂的查询,比如join、嵌套查询等等,为了避免复杂查询对TiKV存取耦合性高,把TiKV请求封装起来提供一个简单的select方法变为一个一个单表操作的计算任务的组合发送给TiKV
4.2 KV(简单查询)
比如主键、唯一键等值查询
DistSQL和KV都会经过TiKV Client发送给TiKV集群
transaction提交会向PD获取一个TSO
5. 在线DDL相关模块
同一时间只能有一个TiDB Server(owner)做DDL操作
- start job:接收DDL语句,接收后会放在TiKV一个队列中
- wokrer:owner中的worker模块去取job queue中第一个job然后执行,执行完后把该job放在history queue中,然后再去取下一个job。每个owner有任期,任期结束后会选举新的owner
- schema load:TiDB Server成为owner后,将最新的表schema信息同步到内部的缓存中,wokrer根据这些信息去执行job queue中的job
job放在TiKV中持久化存储
6. GC机制与相关模块
- 其中一台TiDB Server是GC leader
- 假如现在是14:00,safe_point=10:00,那么14:00到10:00的历史数据是保留的,10:00之前的GC就回收
- GC每10分钟触发一次(GC life time) ,默认值
7. TiDB Server的缓存
TiDB Server 缓存组成
- SQL 结果
- 线程缓存
- 元数据,统计信息
TiDB Server 缓存管理
- tidb_mem _quota_query(控制每条查询默认使用的缓存)
- oom-action(当查询使用的缓存超过了tidb_mem _quota_query值的处理操作,记录到日志或者报错)
8. 热点小表缓存
- 表的数据量不大
- 只读表或者修改不频繁的表
- 表的访问很频繁
alter table users CACHE;
tidb table cache lease = 5,默认值5秒,在5秒内都不能修改这张表,5秒后可以修改,并且修改是在TiKV中,不管在5秒内还是5秒后都可以读取,5秒内在cache table中读取,5秒后在Tikv中读取,当修改完成后,重新refresh到cache table中
热点小表缓存-应用
- TiDB 对于每张缓存表的大小限制为 64 MB
- 适用于查询频繁、数据量不大、极少修改的场景
- 在租约(tidb_table_cache_lease)时间内,写操作会被阻塞
- 当租约到期(tidb table cache lease)时,读性能会下降
- 不支持对缓存表直接做 DDL 操作,需要先关闭
- 对于表加载较慢或者极少修改的表,可以适当延长 tidb table cache lease 保持读性能稳定
9. 总结
- TiDB Server 的整体架构
- TiDB Server 的主要功能
- TiDB Server 的进程与缓存
来自TiDB官方资料
这篇关于TiDB学习2:TiDB Sever的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!