TiKV学习5:TiDB SQL执行流程
目录
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:接收sql
- PD Client到PD节点获取STO
- Parse:词法解析、语法解析,将sql解析为AST语法树
- Compile:区分点查和非点查,生成执行计划
- Execute:拿着执行计划问PD在哪个TiKV Region读取想要的数据
- 读取数据后交由Execute,返回给用户
2. DML语句写流程概要
- Protocol Layer:接收sql
- PD Client到PD节点获取STO
- Parse:词法解析、语法解析,将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角色谁就执行DDL,owner中的worker去job queue(先进先出)中取DDL去执行
- 执行完后把该job放入history queue中
4. SQL的Parse和Compile
- Protocol Layer:接收sql
- PD Client:去PD异步获取TSO
- Parse:词法分析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后进入两阶段提交
第一阶段:prewrite,Transaction从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 job
- start job会检查自己所在的TiDB Server是不是owner
- 如果是owner则直接给workers执行,如果不是就会把DDL做成一个job放到TiKV的job queue中持久化(添加索引放在add index queue中)
- Schema load:将最新的表的元信息载入到TiDB Server
- owner中的worker会定期去查看job queue,当job queue中有job的时候workers就根据元信息执行DDL(Job queue 和 add index queue 中的语句可以并行执行)
- 执行完毕后把job放在history queue中
owner节点是轮询的,由PD节点控制
8. 小结
- DML 语句读写流程
- DDL语句的执行流程
来自TiDB官方资料
相关文章:

TiKV学习5:TiDB SQL执行流程
目录 1. DML语句读流程概要 2. DML语句写流程概要 3. DDL 流程概要 4. SQL的Parse和Compile 5. 读取的执行 6. 写入的执行 7. DDL的执行 8. 小结 1. DML语句读流程概要 TiDB Server接收sql并处理,TiKV负责持久化数据,PD提供TSO和Region的数据字典…...
Unity 自定义编辑器根据枚举值显示变量
public class Test : MonoBehaviour {[HideInInspector][Header("数量")][SerializeField]public int num;[Header("分布类型")][SerializeField]public DistributionType distType;[HideInInspector][Header("位置")][SerializeField]public Li…...
linux下 搭建Llama3
安装软件: Ollama,官方网站:https://ollama.com/ 可以再下载win、mac和linux版本 linux安装命令为:curl -fsSL https://ollama.com/install.sh | sh 由于我的机器是linux不联网机器,网上没找到下载离线方式,…...

【蓝桥杯——物联网设计与开发】拓展模块2 - 电位器模块
一、电位器模块 (1)资源介绍 🔅原理图 蓝桥杯物联网竞赛实训平台提供了一个拓展接口 CN2,所有拓展模块均可直接安装在 Lora 终端上使用; 图1 拓展接口 电位器模块电路原理图如下所示: 图2 …...
Jtti:租用的php服务器运行异常是什么原因导致的?
PHP服务器运行异常可能由多种原因引起。以下是一些常见问题及其相应的解决方案: 1. 服务器资源不足 原因: CPU、内存或磁盘空间不足,导致服务器性能下降。 解决方案: 检查系统资源:使用以下命令检查CPU、内存和磁盘使用…...

恒创科技:无法与服务器建立安全连接怎么解决?
在使用互联网服务时,有时会出现无法与服务器建立安全连接的问题,此错误消息通常出现在尝试访问需要安全连接的网站(例如使用 HTTPS 的网站)时,这可能是由于多种原因造成的,以下是一些常见的解决方法,帮助你解决问题。 …...
【面试】介绍一下HotSpot虚拟机
目录 1. 说明2. 起源与发展3. 技术特点3.1 热点代码探测技术3.2 内存管理3.3 垃圾收集器3.4 并发和多线程支持3.5 指令重排优化 4. 执行模式与性能 1. 说明 1.HotSpot虚拟机是一款由Oracle JDK和OpenJDK广泛使用的Java虚拟机(JVM)。2.HotSpot虚拟机凭借…...

【测试】linux快捷指令工具cxtool
简介 登录linux时,我们经常需要重复输入一些指令. 这个工具可以把这些指令预置,需要的时候鼠标一点,会自动按预置的字符敲击键盘,敲击出指令. 下载地址 https://download.csdn.net/download/bandaoyu/89379371 使用方法 1,编辑配置文件,自定义自己的快捷指令。 2…...
css属性值的计算过程
1.首先抛出一个问题,为什么最终’a’标签渲染的颜色是蓝色。 <div><a>click</a> </div>div {color: red }为什么a标签没有继承父元素的color属性? 2.先抛出一个结论:每一个元素必须拥有全部css属性并且有值浏览器才…...

看到大厂工时爆料,我沉默了。。
大厂工时爆料 今天逛脉脉的时候,看到一篇名为「一人一句,大厂工时爆料」的帖子: 点开之后,我沉默了 ... 出来爆料的基本上都是 10 小时。 好奇心之下,我搜索了一下去年很热的排行榜: 2023 年最新互联网公司…...

最大回撤概念与计算
一、最大回撤,是指的最大下跌的值: 1、即所有下跌趋势中,净值最低的点,与历史净值最高点直接的差值。 2、最大回撤取绝对值显示 二、如果有时间限制,则计算对应时间段内的最大回撤。 示意图如下: 三、举…...

K8s Ingress 详解
文章目录 K8s Ingress 详解Ingress 资源清单Ingress 基于URL 实现路由Ingress 基于名称虚拟主机Ingress 实现HTTPS创建TLS 证书创建Secrets配置ingress Ingress RewriteIngress 灰度发布Ingress 配置认证 K8s Ingress 详解 Ingress 资源清单 apiVersion: networking.k8s.io/v…...
大模型的崛起与未来展望
人工智能技术的飞速发展,令人不得不感叹科技的进步究竟有多么惊人。近年来兴起的大模型,在多个领域都展现出了令人瞩目的能力,引发了业界和大众的广泛关注。从自然语言处理到计算机视觉,从医疗诊断到金融分析,大模型都在不断刷新人类的认知边界。 但我们同时也要看到,大模型目…...

让WSL内核使用BBR拥塞控制算法
使用git命令从Linux内核的Git仓库中获取源代码,$ git clone --depth 1 https://github.com/microsoft/WSL2-Linux-Kernel.git,找到对应的内核版本$ git log --grep="5.15.146.1-microsoft-standard-WSL2",回退到本机安装的内核版本$ git checkout <commit-id&…...

小程序内的分包与数据共享
一:数据共享 小程序内的数据共享和vue当中不一样,vue当中的vue实例可以使得所有的组件都能this.store 但是小程序它只有page对象,和组件实例对象.对于vue而言,vue实例可以使得添加的组件都有. 但是page对象页面对象,不能使得页面内部有.只能使得这个页面内能访问.vue实例,会…...

WordPress子比主题美化-首页动态的图片展示
WordPress子比主题首页动态的图片展示 WordPress子比主题首页添加动态的图片展示,其他程序也可以用,复制代码到相应位置即可,也可作为指定分类,重点内容等,可以适合各个场景,需要的自取。 图片展示: 教程…...

jsp实验19 File
三、源代码以及执行结果截图: readJSPFile.jsp <% page contentType"text/html" %> <% page pageEncoding "utf-8" %> <% page import"java.io.*"%> <style> #tom{ font-family:宋体;font-size:2…...

【OpenVINO™】在C#中使用 OpenVINO™ 部署 YOLOv10 模型实现目标
文章目录 1. 前言1.1 OpenVINO™ C# API1.2 YOLOv10 2. 模型获取2.1 源码下载2.2 配置环境2.3 下载模型 3. Yolov10 项目配置3.1 项目创建与环境配置3.2 定义模型预测方法3.2.1 定义目标检测模型方法3.2.2 使用OpenVINO™ 预处理接口编译模型 3.2 模型预测方法调用 4. 项目运行…...
RabbitMQ 如何保证消息不丢失
开启消息确认机制: 在发布消息时,可以设置deliveryMode为2(持久化),以确保消息不会因为RabbitMQ的崩溃而丢失。 使队列持久化: 通过设置durable为true,可以确保队列在RabbitMQ重启后依然存在。…...

【技术突破】合合信息新品震动业界,TextIn智能抽取,是不是藏了黑科技?
官.网地址:合合TextIn - 合合信息旗下OCR云服务产品 随着文本数据关系的日益复杂化,传统的信息抽取技术面临着诸多挑战。深度学习模型的训练往往需要大量的高质量标注的训练样本,依赖规则实现上下文对话,新样本如果变换了行文方式…...

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...

数据分析六部曲?
引言 上一章我们说到了数据分析六部曲,何谓六部曲呢? 其实啊,数据分析没那么难,只要掌握了下面这六个步骤,也就是数据分析六部曲,就算你是个啥都不懂的小白,也能慢慢上手做数据分析啦。 第一…...

leetcode_69.x的平方根
题目如下 : 看到题 ,我们最原始的想法就是暴力解决: for(long long i 0;i<INT_MAX;i){if(i*ix){return i;}else if((i*i>x)&&((i-1)*(i-1)<x)){return i-1;}}我们直接开始遍历,我们是整数的平方根,所以我们分两…...

CSS 工具对比:UnoCSS vs Tailwind CSS,谁是你的菜?
在现代前端开发中,Utility-First (功能优先) CSS 框架已经成为主流。其中,Tailwind CSS 无疑是市场的领导者和标杆。然而,一个名为 UnoCSS 的新星正以其惊人的性能和极致的灵活性迅速崛起。 这篇文章将深入探讨这两款工具的核心理念、技术差…...
标注工具核心架构分析——主窗口的图像显示
🏗️ 标注工具核心架构分析 📋 系统概述 主要有两个核心类,采用经典的 Scene-View 架构模式: 🎯 核心类结构 1. AnnotationScene (QGraphicsScene子类) 主要负责标注场景的管理和交互 🔧 关键函数&…...
湖北理元理律师事务所:债务清偿方案中的法律技术革新
文/金融法律研究组 当前债务服务市场存在结构性矛盾:债权人追求快速回款,债务人需要喘息空间。湖北理元理律师事务所通过创新法律技术,在《企业破产法》《民法典》框架下构建梯度清偿模型,实现多方利益平衡。 一、个人债务优化的…...
Vue项目PDF目录功能集成【一】——方案深度思考
文章目录 项目背景一、方案一:数据透传 外部开发模式二、方案二:内置组件 黑盒模式三、方案三:激活官方实现 可控定制总结 项目背景 本项目是Vue 3 项目,需要使用文件预览组件(pdfjs 当前是作为sdk二次封装引入&am…...