目录

DML语句读写流程概要

DDL流程概要

SQL的Parse与Compile

读取的执行

写入的执行

例题 


DML语句读写流程概要

DML(Data Manipulation Language)数据操作语言数据库的基本操作,SQL中处理数据等操作统称为数据操纵语言,简而言之就是实现了基本的“增删改查”操作;包括的关键字有:select、update、delete、insert、merge等   

sqlalchemy 执行sql update sql执行数据_sql

sqlalchemy 执行sql update sql执行数据_sql_02

 1.对于DML语句的写流程,需要向PD获取事务开始时的时间戳和事务结束时的时间戳

 2.执行写事务,首先向获取TiKV rocksdb获取所要修改的数据,并在memBuffer中进行修改

DDL流程概要

DDL(Data Definition Language)数据定义语言用于定义和管理 SQL 数据库中的所有对象的语言,对数据库中的某些对象(例如,database,table)进行管理;包括的关键字有:create、alter、drop、truncate、comment、grant、revoke等

sqlalchemy 执行sql update sql执行数据_Server_03

job queue:非加索引操作(如加列,减列)
add index queue:加索引操作

Owner的workers从job queue中取出job执行,执行完后放入history queue

ps:Owner可以并行处理add index queue中的加索引操作和 job queue中的非加索引操作,即DDL语句是可并行执行的

SQL的Parse与Compile

sqlalchemy 执行sql update sql执行数据_Server_04

 1.首先Protocol Layer收到SQL语句

 2.通过PD Client向PD获取开始时间

 3.进入Parse进行词法解析,语法解析,生成AST语法树

 4.Compile接收到AST语法树,进入preprocess模块进行SQL的合法性校验

    对于点查,跳过优化过程

    对于非点查(扫描,索引),进行逻辑优化和物理优化

读取的执行

sqlalchemy 执行sql update sql执行数据_sql_05

首先通过PD Client向PD获取开始时间戳

向information schema获取表的元数据

向TiKV Client获取region的元数据(所修改表的Key所在的region及TiKV)

关于TiKV Client中的region Cache:若访问未命中,则通过PD Client向PD读取region的元数据并存入region Cache共下次查询

sqlalchemy 执行sql update sql执行数据_SQL_06

 KV:负责点查的处理

 DistSQL:负责有关索引,扫描的处理

(将复杂的SQL转化成对单表的查询)

TiKV node接收读取请求构建快照snapshot(各种操作的时间点)并送入UnifiyRead pool线程池按优先级执行

sqlalchemy 执行sql update sql执行数据_数据库_07

coptask:算子下推,由TiKV承担的部分

root task:TiDB Server承担的部分,如连接,合并结果等

写入的执行

sqlalchemy 执行sql update sql执行数据_数据库_08

Scheduler:协调事务写入的并发冲突并将收到的修改操作向下写入,当发生冲突修改同一个key则拿到latch的修改先执行

RaftStore:生成raft log持久化至rocksdb raft中,并向其他副本发生raft log

sqlalchemy 执行sql update sql执行数据_mysql_09

 Apply:应用raft log到rocksdb KV中

sqlalchemy 执行sql update sql执行数据_SQL_10

接收到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中