TiDB PCTA认证备考笔记-05-SQL执行流程

SQL执行流程

6.1读取流程概要

6.1读取流程概要
在这里插入图片描述
用户发出SQL,用potocol layer接收,parse,compile,execute,到rocksdb kv中,将需要修改的内容读出来,放在tidb server的membuffer中,当用户发出commit命令后,进入transaction进行两阶段提交(prewrite)(二阶段提交的commit),全部结束后,到pd节点读取结束的tso(读的时候需要开始的tso,写的时候需要开始和结束的tso)

2.DDL流程概要

在这里插入图片描述
用户发出DDL语句后,tidbserver中的start job,会将其放到tikv中的job 队列,job队列有3种:job queue,add index queue,和history queue。由tidb server中的owner的workers模块来进行处理job,处理完后将其清除队列并放入history queue中。

owner并不是一直不变的,会定期进行选举,产生新的owner

3.SQL的Parse与Compile

在这里插入图片描述
客户端发出sql,由tidb server protocol layer监听到客户端发来的sql,对sql文本进行处理,先从pd client从pd处获取开始的tso(读写都要),然后进行parse和compile模块进行解析,parse模块使用词法分析和语法分析,转换成AST语法树,这个语法树被传到compile模块。compile模块首先预处理,检测这条sql的语法性以及名称是否正确以及绑定信息的准确。如果是点查直接就执行,如果不是点查,就会进行optimize(逻辑优化/物理优化),物理优化根据逻辑优化,再根据统计信息,高效的取到数据。最后用物理执行计划到tikv中取数据。

4.读取的执行

在这里插入图片描述
收到执行计划后,execute需要获取表名这些元数据信息,information schema已经有记录了,可以从tidb server的缓存中读取。

这时候还要了解这个表所在的region以及tikv节点问题,这个时候只有pd有,pd和tidb server是有网络连通的,有负载,这时候我们第一次读取数据时,就会将其缓存在tikv client中的region cache中,以便后面使用。这时候如果发生变化后,会过期会再次到pd中去获取。
在这里插入图片描述
当tidb server获取了需要的表元数据信息和region的元数据信息后,接下来就是到tikv中去获取数据了。
KV对付的是点查
distsql应对的是复杂sql,distsql会将其复杂的sql语句转换成各个单表的查询,最后将结果集合并处理。获得简单的sql后发送给tikv获取结果。
tikv接收到请求后,会生成一个快照对象snapshot(特定时间点的结构),不论是点查还是复杂查询都会进入Unifyread pool中按优先级执行查询,到rocksdb kv中获取数据。
在这里插入图片描述
数据发回到tidb servevr中的tikv client后,(这里包含算子下推)

5.写入的执行

在这里插入图片描述
写入的执行,需要将修改的数据先读到membuffer中,之前跟读没区别。
transaction进入两段式提交,第一个阶段prewrite,第二个阶段是committed
transaction会从头遍历membuffer中的数据,数据是按序存放的,就按序执行。
在事务开始时获得tso,结束也要tso
我们的kv模块负责transaction读取之后,用kv去操作key值,通过tikv client发送到tikv中。
在这里插入图片描述
当请求发送给tikv client后,就需要到tik中去执行了,scheduler和raftstore,写请求发到scheduler当收到并发请求是并发写入时,这时就引入了latch去锁定,让谁先写。没有冲突的就进入到raftstore,将写请求转化成raft log,持久化到本地,并向其他tikv节点发送,同步操作。apply顺序读取这些raft log应用到rocksdb中。

6.DDL的执行

在这里插入图片描述
支持online ddl,ddl语句不锁表,增删改查不会被堵塞
协议,解析,编译后,start job负责接受DDL语句,start job接受到执行计划后,由owner的workers来进行执行。
shemaload:worker是确定是owner了,schema load将最新的元数据信息载入到tidb server中。

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值