数据库必知必会:TiDB(8)TiDB 数据库 SQL 执行流程

article/2025/9/2 20:45:12

数据库必知必会:TiDB(8)TiDB 数据库 SQL 执行流程

  • 数据库 SQL 执行流程
    • DML语句读流程
      • 概述
      • SQL的Parse与Compile
      • SQL的Execute
    • DML语句写流程
      • 概述
      • 执行
    • DDL语句流程
      • 概要
      • 执行
  • 知识点回顾

数据库 SQL 执行流程

在TiDB中三个重要组件:

PD:分配TSO、存储数据的元数据信息。

TiDB Server:接收用户的SQL请求,从PD获取TSO和元数据信息,对SQL进行解析、优化、生成执行计划到TiKV中读取数据。

TiKV:数据持久化。

DML语句读流程

概述

image-20230204214350701

TiDB Server中的Protocol Layer首先接收用户的SQL请求,TiDB Server会到PD获取TSO,同时经过解析模块Parse对SQL进行词法分析和语法分析,再由Compile模块进行编译,最终进行Execute。

SQL的Parse与Compile

image-20230204215904907

Protocol Layer接收到SQL请求后,会由PD Client与PD进行交互,获取TSO。

Parse模块会对SQL进行词法分析、语法分析,生成抽象语法树AST。

Compile分成几个阶段:

  • 预处理preprocess,检测SQL的合法性、绑定信息等,判断SQL是否是点查SQL(仅查询一条数据,比如按Key查询),如果是点查语句则不需要执行optimize优化,直接执行即可。
  • 优化optimize,逻辑优化,根据关系代数、等价交换等对SQL进行逻辑变换,比如外连接尝试转内连接等;物理优化,基于逻辑优化的结果和统计信息,选择最优的算子。

SQL的Execute

image-20230204220606319

Compile的产物是执行计划,有了执行计划之后就由Executor进行执行。

Executor先获取information schema,information schema可以预先从TiKV加载到TiDB Server。然后Executor需要从PD获取Region的元数据信息,为了减少TiDB Server与PD交互带来的网络开销、延迟,TiKV Client的region Cache可以缓存Region的元数据信息,后续就可以直接使用。

image-20230204221558022

Executor执行数据读取有两种类型,点查SQL,直接读取KV;复杂SQL,需要通过DistSQL将复杂SQL转换成对单表的简单查询SQL。

TiKV接收到读取请求后,会创建一个数据快照snapshot,所有查询SQL都会进入UnifyRead Pool线程池,然后从RocksDB KV读取数据。

image-20230204222600102

当数据读取完成后,数据通过TiKV Client返回给TiDB Server。

由于TiDB实现了算子下推,对于聚合操作,TiKV完成cop task,TiDB Server完成root task,也就是在TiDB Server中还需要对下推算子的聚合结果进行汇总。

DML语句写流程

概述

image-20230204215037040

写流程,会先经过一次读流程,将数据读取到缓存MemBuffer中,然后再进行数据修改,最后进行两阶段提交进行数据写入。

执行

image-20230204222934633

Transaction执行两阶段提交。

Transaction按行读取memBuffer的数据进行数据写入,事务包含两个TSO,一个是事务开始TSO,一个是事务提交TSO。

image-20230204223227300

写请求发送给TiKV的Scheduler,Scheduler是接收并发处理的,所需需要负责协调冲突写入(两个会话并行写相同的Key),冲突写入采用分配latch,谁获得latch谁执行写操作的方式解决冲突。无冲突的写入,交Raftstore,完成Raft日志写入过程,涉及本地append、replicate、commited、apply等过程。

DDL语句流程

概要

image-20230204215450404

TiDB Server接收到用户的DDL请求,start job模块将操作写入队列,由TiDB Server的Owner角色的workers模块负责执行队列中的DDL语句。

workers从job queue队列中获取待执行的DDL语句,执行,执行完成后将其放到history queue队列中。

执行

TiDB支持Online DDL,也就是DDL不锁表,不阻塞读、写。

image-20230204223747117

同一时刻,只有一个TiDB Server的角色是Owner角色的,只有Owner角色的TiDB Server的workers才可以执行DDL。schema load负责将最新的表结构信息加载到TiDB Server。

Compile生成的执行计划,交给start job,start job先检查本机节点的角色是否是Owner,如果是,则可直接由本机workers直接执行,如果不是,则start job将DDL操作封装成job加入到job queue队列中。如果DDL操作是对索引的操作,则job会加入到add index queue。

image-20230204224520664

Owner的workers会定时扫描job queue,发现queue中有job就获取执行,执行完成后将job加入到history queue中。

Owner角色由PD协调,在TiDB Server之间是轮询切换,所以总体来说,每个TiDB Server都有机会成为Owner。

知识点回顾

  1. 下列关于 DML 语句读写说法正确的是?( 选 2 项 )

A. Region Cache 的主要作用是缓存热数据,减少访问 TiKV 的次数

B. 二阶段提交在获取事务开始的 TSO 和提交的 TSO 时,都是由 TiDB Server 完成的

C. schedule 模块采用 latch 来控制当前正在写的数据不被读取

D. 在写操作中,锁信息也会被写入到 RocksDB KV 中

解析:Region Cache主要缓存Region的元数据信息,TSO都是由PD分配、由TiDB Server从PD获取

  1. 关于 DDL 语句的执行流程,下列说法正确的是?

A. DDL 语句不可以在 TiDB 中并行执行

B. 同一时刻,不可以有多条 DDL 语句在等待执行

C. 同一时刻,只有一个 TiDB Server 可以执行 DDL 语句

D. 等待执行的 DDL 语句被持久化在 TiDB Server 的存储中

解析:DDL语句封装成job持久化到TiVK的queue中,由Owner角色的workers从queue中获取执行,queue中可以包含多条等待执行的DDL。


http://chatgpt.dhexx.cn/article/V7sTd0hQ.shtml

相关文章

时不我待,TSDB崛起正当时

近期有小伙伴问Jesse,为什么你们要在现在这个时点做TSDB,这是个好时点吗?我认为这是个挺好的问题,因为再强的个人也比不上一个团队,再牛的团队也需要顺势而为。我们其实一直在深度思考“Why Now”的问题,因…

时间序列数据库TSDB排名

DB-Engines 中时序列数据库排名 我们先来看一下DB-Engines中关于时序列数据库的排名,这是当前(2016年2月的)排名情况: 下面,我们就按照这个排名的顺序,简单介绍一下这些时序列数据库中的一些。下面要介绍的…

TiDB Server

目录 TiDB Server架构 Online DDL GC 缓存管理 热点小表缓存 例题 TiDB Server架构 Protocol Layer:负责处理客户端的连接 Parse,Compile:负责SQL语句的解析与编译,并生成执行计划 Executor,DistSQL&#xff0…

Prometheus TSDB

TSDB 概述: Head: 数据库的内存部分 Block: 磁盘上持久块,是不变的 WAL: 预写日志系统 M-map: 磁盘及内存映射 粉红色框是传入的样品,样品先进入Head中存留一会,然后到磁盘、内存映射中(蓝色框)。然后当内…

TiDB体系结构之TiDB Server

TiDB体系结构之TiDB Server TiDB ServerTiDB Server主要组成模块SQL语句的解析和编译行数据与KV的转化SQL读写相关模块在线DDL相关模块TiDB的垃圾回收TiDB Server的缓存 TiDB Server TiDB Server的主要作用如下: 处理客户端连接SQL语句的解析和编译关系型数据与KV…

TSDB助力风电监控

各位小伙伴大家好,本期Jesse想再来跟大家聊聊TSDB的应用场景,在此也感谢尹晨所著的《时序数据库在风电监控系统中的应用》一文,其为我们探究TSDB在风电系统中的应用提供了重要的帮助。 本文仅代表个人观点,如有偏颇之处&#xff…

dbt-tidb 1.2.0 尝鲜

作者: shiyuhang0 原文来源: https://tidb.net/blog/1f56ab48 本文假设你对 dbt 有一定了解。如果是第一次接触 dbt,建议先阅读 官方文档 或 当 TiDB 遇见 dbt 本文中的示例基于官方维护的 jaffle_shop 项目。关于此项目的细节介绍&a…

为啥用 时序数据库 TSDB

前言 其实我之前是不太了解时序数据库以及它相关的机制的,只是大概知晓它的用途。但因为公司的业务需求,我意外参与并主导了公司内部开源时序数据库influxdb的引擎改造,所以我也就顺理成章的成为时序数据库“从业者”。 造飞机的人需要时刻…

Prometheus 学习之——本地存储 TSDB

Prometheus 学习之——本地存储 TSDB 文章目录 Prometheus 学习之——本地存储 TSDB前言一、TSDB 核心概念二、详细介绍1.block1)chunks2)index3)tombstone4)meta.json 2.WAL 总结 前言 Prometheus 是 CNCF 收录的第二个项目&…

阿里云IoT物模型上报数据流转到实例内TSDB

阿里云物联网平台上存储的数据最多为30天,为了能让数据永久保存下来,就需要把物联网平台的数据流转到其他的数据库,对于企业版实例,内部有一个实例内的时空数据库TSDB,正好可以利用。下边就介绍一下物联网平台的物模型…

使用TSDB自动检测时序数据的异常情况

本期Jesse就带大家来继续了解一下TSDB的应用问题,小伙伴们,让我们直接步入正题吧。 本文仅代表个人观点,如有偏颇之处,还请海涵~ 现今,每天都有数千亿个传感器产生大量时序数据。公司收集大量数据使得分析…

TSDB 存储引擎介绍

本文介绍 DolphinDB 在2.0版本中新推出的存储引擎 TSDB。 1. OLAP 与 TSDB 适用的场景 OLAP 是 DolphinDB 在2.0版本之前的唯一存储引擎。数据表中每个分区的每一列存为一个文件。数据在表中的存储顺序与数据写入的顺序一致,数据写入有非常高的效率。 OLAP 引擎的…

TSDB与Blockchain

各位小伙伴们我们又见面了,伴随着区块链技术的推广,很多企业也在思考是否将其应用。其实TSDB与区块链有很多共通之处,本期Jesse就来和大家聊聊TSDB与区块链。本文参考了Nicolas Hourcard的文章“You Don’t Need a Blockchain, You Need a Ti…

FlashDB嵌入式数据库之TSDB数据存储解析

一、驱动层:SFUD(Serial Flash Universal Driver) 是一款开源的串行 SPI Flash 通用驱动库 二、中间层:FAL(FLASH ABSTRACTION LAYER))FLASH 抽象层 三、应用层:FlashDB(FlashDB 是一…

时间序列数据库 (TSDB)

参考文档:时间序列数据库 TSDB_时间序列数据库 TSDB-阿里云帮助中心 什么是时序数据库 时序数据是随时间不断产生的一系列数据,简单来说,就是带时间戳的数据。数据可能来自服务器和应用程序的指标、物联网传感器的读数、网站或应用程序上的…

TSDB在高速公路大数据平台的应用

好久没有跟大家聊TSDB的应用场景了,Jesse也在国庆期间进行了补课,今天就跟大家聊聊TSDB在高速公路大数据平台的应用。本文借鉴了郝建明、袁逸涛发表在《上海船舶运输科学研究生学报》的《基于时序数据库的高速公路数据集成平台》一文,感谢二位…

时序数据库(TSDB)

时序数据库(TSDB)是一种特定类型的数据库,主要用来存储时序数据。随着5G技术的不断成熟,物联网技术将会使得万物互联。物联网时代之前只有手机、电脑可以联网,以后所有设备都会联网,这些设备每时每刻都会吐…

TSDB数据库

目录 为什么需要时序数据库: 时间序列数据库的特点: 常见的时间序列数据库: 时间序列数据库存储: 时间序列数据库问题: 参考资料: 内容是在我球的docs上直接复制过来的,懒得写两份&#x…

关于时许数据库的相关名词解释

1 时序数据库TSDB 英文全称为 Time Series Database,提供高效存取时序数据和统计分析功能的数据管理系统。 2 时序数据(Time Series Data) 基于稳定频率持续产生的一系列指标监测数据。例如,监测某城市的空气质量时&#xff0c…

物联网平台搭建的全过程介绍(六)——物联网TSDB之基本知识及读写代码介绍

目录 一、TSDB基本知识 二、物联网平台数据流通架构 三、TSDB数据结构 1、TSDB数据包的组成 2、TSDB的另外两个相关概念 四、阿里云物联网平台实例内TSDB功能介绍 1、数据写入 (1)需要添加的依赖 (2)写入数据代码 2、数据…