一个网站需要怎么做,北京网站建设小程序开发,郑州网站建设网站开发,郑州郑东新区网站建设目录
1. DML语句读流程概要
2. DML语句写流程概要
3. DDL 流程概要
4. SQL的Parse和Compile
5. 读取的执行
6. 写入的执行
7. DDL的执行
8. 小结 1. DML语句读流程概要 TiDB Server接收sql并处理#xff0c;TiKV负责持久化数据#xff0c;PD提供TSO和Region的数据字典…目录
1. DML语句读流程概要
2. DML语句写流程概要
3. DDL 流程概要
4. SQL的Parse和Compile
5. 读取的执行
6. 写入的执行
7. DDL的执行
8. 小结 1. DML语句读流程概要 TiDB Server接收sql并处理TiKV负责持久化数据PD提供TSO和Region的数据字典信息
Protocol Layer接收sqlPD Client到PD节点获取STOParse词法解析、语法解析将sql解析为AST语法树Compile区分点查和非点查生成执行计划Execute拿着执行计划问PD在哪个TiKV Region读取想要的数据读取数据后交由Execute返回给用户
2. DML语句写流程概要 Protocol Layer接收sqlPD Client到PD节点获取STOParse词法解析、语法解析将sql解析为AST语法树Compile区分点查和非点查生成执行计划Execute拿着执行计划问PD在哪个TiKV Region读取想要的数据读出来的数据放在memBuffer中进行修改当用户发起commit的时候进入两阶段提交 第一阶段prewrite将内存中修改的信息和锁信息写入TiKV第二阶段commit写提交信息将锁清理掉获取结束TSO二阶段提交完成后返回给用户提交成功数据不会丢了
3. DDL 流程概要 修改表定义、加索引等等都是DDL
用户发出DDL语句TIDB Server中的start job接收DDL语句将DDL放入TiKV中的job queue中(添加索引是放在 add index queue中)TIDB Server谁是owner角色谁就执行DDLowner中的worker去job queue(先进先出)中取DDL去执行执行完后把该job放入history queue中
4. SQL的Parse和Compile Protocol Layer接收sqlPD Client去PD异步获取TSOParse词法分析LEX语法分析YACC将sql转化成AST语法树compile preprocess检测sql合法性名称是否正确一些绑定信息等判断是否是点查如果是点查(PointGet)的话直接就执行节约了优化的工作如果是非点查的话进入优化流程 ①逻辑优化关系代数、等价交换等一些规则将sql语句进行一些逻辑的变换比如把外连接转化为内连接等等②物理优化基于逻辑优化的结果结合相关的统计信息(行数、列的选择度、直方图等等)选择最优的算子如何去TiKV中好的效率最高的取得数据编译完成后生成物理执行计划拿着物理执行计划去TiKV中取数据
5. 读取的执行 当Executor收到执行计划后Executor做两件事
①从information schema缓存中是最新的中获得元数据表名、列名等②要修改的数据对应Key在所在的Region以及Region所在的TiKV第一次会从PD中获取Region的位置然后缓存在TiKV Client中的region Cache中如果region Cache的信息过期了(back off)访问的时候会再次从PD中读取最新的信息到region Cache中
经过了以上过程获得了表的元数据以及Key所在的Region和TiKV Executor读取数据
如果是点查KV模块就通过TiKV Client直接读取数据如果是非点查复杂sql语句DistSQl模块会将复杂的sql转换成多条对单表的查询语句然后通过TiKV Client去TiKV取数据
TiKV接收到请求后首先会构建一个快照snapshot
点查和非点查都会进入UnifyRead Pool线程池按照优先级执行查询到RocksDB kv去读取数据
一部分过滤和聚合在TiKV中做叫coptask还有一部分在TiDB中(比如三张表连接三张表散落在3个TiKV中先把数据读到TiDB内存中再做表连接)叫root task
6. 写入的执行 前面的读取流程是一样的从读出数据开始把需要修改的数据读到memBuffer中用户commit后进入两阶段提交 第一阶段prewriteTransaction从memBuffer中一行一行读取数据修改数据通过KV和TiKV Client写到TiKV中并加锁
写请求发送给Scheduler模块(协调事务并发写入的冲突并将收到的修改操作向下写入)同时写入同一个Key的时候谁持有Latch谁就可以写数据其他的需等待Latch然后到RaftStore将写请求转换为raft log此时会在本地RocksDB raft持久化raft log并把raft log发送给其他节点然后Apply模块把读取rocksdb raft log应用到rocksdb kv中持久化存储然后反馈写入成功。 第二阶段commit获取结束TSO写提交信息清理锁
7. DDL的执行 Protocol Layer接收DDL经过Parse和Compile到达start jobstart job会检查自己所在的TiDB Server是不是owner如果是owner则直接给workers执行如果不是就会把DDL做成一个job放到TiKV的job queue中持久化添加索引放在add index queue中Schema load将最新的表的元信息载入到TiDB Serverowner中的worker会定期去查看job queue当job queue中有job的时候workers就根据元信息执行DDLJob queue 和 add index queue 中的语句可以并行执行执行完毕后把job放在history queue中
owner节点是轮询的由PD节点控制
8. 小结
DML 语句读写流程DDL语句的执行流程
来自TiDB官方资料