TiDB的功能
- 处理客户端连接
- 对SQL进行解析和编译
- SQL和KV进行转换
- 执行SQL
- 执行online ddl
- GC
1, 处理客户端连接: SQL Protocol层
2, 对SQL进行解析和编译:
Parse:将SQL转换为AST抽象语法树
Compile模块:根据传入的AST
-> 合法性验证(列、表是否存在)
-> 逻辑语法树(依据关系型等价规则进行逻辑变换)
-> 物理优化(根据逻辑优化的结果考虑数据分布和大小,考虑算子,走哪个索引还是全表扫描)
生成执行计划
3, SQL和KV进行转换
KEY: 表编号+主键编号:T24_r1
Value: 列的组合 col1,col2,col3...
多个K-V从而构成Region;
Region默认96MB, 如果达到144MB会进行自动Split;
4, 执行SQL
Executor: 按照Compile生成的执行计划开始执行,每一层调用下一层的方法获得结果;
DistSQL: 将复杂的SQL经过DistSQL转换为对单标的操作的组合,发送给TiKV;
KV模块: 对于点查的请求的处理;(主键或唯一索引,查询1条或者0条);
TiKV Client: 主要负责向TiKV集群发送读写请求;
5, 执行online ddl
Start job: 接收用户发起的DDL语句,将其放到tikv重点job 队列中;
workers: 执行DDL的组件,每个集群只有一个owner, tidb server owner去job queue中取一个job进行执行;执行结束后将job 放到history queue;
每个owner都有时间限制,超过一定时间会重新选举新的tidb owner;谁是owner谁就负责执行job;
schema load: 当前tidb server称为owner之后会将最新的schema信息同步到内部缓存中,从而执行job queue;
6, GC
保存历史版本,可以用户恢复;GC来控制整个集群的历史版本数据进行清理;
一般每10min触发一次GC,GC life time,每次触发会保留safe point(默认10min)到当前时间之间的数据;
TiDB Server缓存的介绍:
1, 缓存促成:
SQL 结果
线程缓存
元数据,统计信息
2, TiDB Server缓存管理
tidb_mem_quota_query:控制每条sql语句的默认缓存大小;
oom-action: 如果缓存超过设置的阈值后的行为动作;