简介
较深入的介绍TiDB Server。
TiDB Server 架构
图解
1.下面是负责SQL语句的解析和优化。
2.下面试负责TiKV存储多版本,过期版本的清理作用。
3.复杂SQL的拆分(如果是点查那么就不需要经过DistSQL)。
4.事务相关。
5.负责PD和TiKV的通信功能。
6.负责Online DDL。(保证不会阻塞线上的读写操作)
7.一些认证信息的缓存,和数据的缓存(cache table 是缓存小表的作用)。
主要功能
SQL语句的解析和编译
1.下图是生成AST语法树的过程。
2.解析SQL的正确性,下面的物理优化,会根据表的统计信息,来决定是走全表扫描还是走索引查询,下面的元数据缓存是从PD查询过来的缓存,包括数据的位置等等信息。
关系表装换KV存储
1.下图是一张聚簇表,由于编号为1的可能很多表都有,所以前面加了一个表的编号确定唯一性。
2.region的切分(默认一个region是96M,如果之前的region有修改的操作96M变成144M的时候会在进行切分)。
SQL读写相关模块
- 如果是简单的查询,那么就是走KV模块。
- 如果是复杂的查询,那么就是走DisSQL模块。
- 如果有事务相关,那么就是走Transaction模块。
在线DDL相关模块
客户端提交DDL请求给start job,然后TiDB Server之前会选择出一个owner来执行TiKV的job。从而执行在线的DDL操作。
GC机制与相关模块
在TiKV里面保存的数据有多个版本的情况,这个时候我们不太需要执行的版本的时候,TiDB Server就会启动GC的机制,清楚不需要的历史版本。它保存的时间点有一个safe point。
TiDB Server的缓存
SQL结果的缓存是一些多表的join操作,对于缓存的使用量就比较大。
还有相关事务的操作,所有相关事务的操作都会放在缓存中。
tidb_mem_quota_query(查询使用的缓存)
oom-action(当缓存操作tidb_mem_quota_query以后会有什么执行操作)
热点小表缓存
热点小表缓存原理
满足小表缓存的前提是表的大小在64M之内。
tidb_table_cache_lease=5;表示这个5秒的时间内可以在缓存中读取缓存的表,没有必要在向TiKV查找数据,在5秒内,所有用户不能够修改TiKV的数据,这要保证缓存和TiKV的实际数据是数据一致的。
5秒以后,可以进行修改操作在TiKV里面,后面的读操作也是在TiKV里面。
修改完数据以后,TiKV的数据会重新的写到小表缓存中。
注意事项