目录
DML语句读写流程概要
DDL流程概要
SQL的Parse与Compile
读取的执行
写入的执行
例题
DML语句读写流程概要
DML(Data Manipulation Language)数据操作语言数据库的基本操作,SQL中处理数据等操作统称为数据操纵语言,简而言之就是实现了基本的“增删改查”操作;包括的关键字有:select、update、delete、insert、merge等
1.对于DML语句的写流程,需要向PD获取事务开始时的时间戳和事务结束时的时间戳
2.执行写事务,首先向获取TiKV rocksdb获取所要修改的数据,并在memBuffer中进行修改
DDL流程概要
DDL(Data Definition Language)数据定义语言用于定义和管理 SQL 数据库中的所有对象的语言,对数据库中的某些对象(例如,database,table)进行管理;包括的关键字有:create、alter、drop、truncate、comment、grant、revoke等
job queue:非加索引操作(如加列,减列)
add index queue:加索引操作
Owner的workers从job queue中取出job执行,执行完后放入history queue
ps:Owner可以并行处理add index queue中的加索引操作和 job queue中的非加索引操作,即DDL语句是可并行执行的
SQL的Parse与Compile
1.首先Protocol Layer收到SQL语句
2.通过PD Client向PD获取开始时间
3.进入Parse进行词法解析,语法解析,生成AST语法树
4.Compile接收到AST语法树,进入preprocess模块进行SQL的合法性校验
对于点查,跳过优化过程
对于非点查(扫描,索引),进行逻辑优化和物理优化
读取的执行
首先通过PD Client向PD获取开始时间戳
向information schema获取表的元数据
向TiKV Client获取region的元数据(所修改表的Key所在的region及TiKV)
关于TiKV Client中的region Cache:若访问未命中,则通过PD Client向PD读取region的元数据并存入region Cache共下次查询
KV:负责点查的处理
DistSQL:负责有关索引,扫描的处理
(将复杂的SQL转化成对单表的查询)
TiKV node接收读取请求构建快照snapshot(各种操作的时间点)并送入UnifiyRead pool线程池按优先级执行
coptask:算子下推,由TiKV承担的部分
root task:TiDB Server承担的部分,如连接,合并结果等
写入的执行
Scheduler:协调事务写入的并发冲突并将收到的修改操作向下写入,当发生冲突修改同一个key则拿到latch的修改先执行
RaftStore:生成raft log持久化至rocksdb raft中,并向其他副本发生raft log
Apply:应用raft log到rocksdb KV中
接收到DDL的TiDB Server先查看自己是不是owner,若不是则start job将DDL转化为job放入job queue,之后由Owner的worker去执行
Owner的workers按一定周期查看队列中是否有job,有则执行并将执行后的job放入history queue
ps:PD将进行轮询,产生新的Owner
例题
1.下列关于DML语句读写说法正确的是?(选2项)
A.Region Cache的主要作用是缓存热数据,减少访问TiKV的次数
B.二阶段提交在获取事务开始的TSO和提交的TSO时,都是由TiDB Server完成的
C. schedule模块采用latch来控制当前正在写的数据不被读取
D.在写操作中,锁信息也会被写入到RocksDB KV中
答案:B,D
解析:A:Region Cache主要缓存元数据,减少访问PD的次数;C:schedule模块采用latch来协调写入冲突,latch本质上对冲突的写入进行排序而不是不被读取
2关于DDL语句的执行流程,下列说法正确的是?
A.DDL语句不可以在TiDB中并行执行
B.同一时刻,不可以有多条DDL语句在等待执行
C.同一时刻,只有一个TiDB Server可以执行DDL语句
D.等待执行的DDL语句被持久化在TiDB Server的存储中
答案:C
解析:A:因为只有一个Onwer,虽然不可以并行job queue中的job,但可以并行执行add index queue和job queue中的job;B:DDL转化为job存储子job queue中;D:等待执行的DDL语句被持久化在TiKV中