TiDB体系结构之TiDB Server

article/2025/9/2 20:43:37

TiDB体系结构之TiDB Server

  • TiDB Server
    • TiDB Server主要组成模块
    • SQL语句的解析和编译
    • 行数据与KV的转化
    • SQL读写相关模块
    • 在线DDL相关模块
    • TiDB的垃圾回收
    • TiDB Server的缓存

TiDB Server

TiDB Server的主要作用如下:

  • 处理客户端连接
  • SQL语句的解析和编译
  • 关系型数据与KV的转化
  • SQL语句的执行
  • 在线DDL的执行
  • 垃圾回收(Garbage Collection

TiDB Server主要组成模块

TiDB Server由多个不同的功能模块组成。

在这里插入图片描述

以下三个模块负责解析和编译SQL语句,并生成SQL语句的执行计划:

  • Protocol Layer
  • Parse
  • Compile

以下四个模块负责SQL的执行:

  • Executor:负责执行SQL语句;
  • DistSQL:负责涉及范围查询、分组查询、表连接的SQL执行;
  • Transaction:负责事务相关的内容;
  • KV:负责点查询SQL执行;

以下两个模块负责与PD和TiKV交互:

  • PD Client:负责与PD节点交互;
  • TiKV Client:负责与TiKV节点交互;

以下三个模块负责online DDL操作:

  • schema load
  • worker
  • start job

以下两个模块负责垃圾回收与数据缓存:

  • GC:负责垃圾回收;
  • memBuffer:用户缓存读取的数据、元数据、登录认证信息、统计信息等内容。

SQL语句的解析和编译

TiDB Server中SQL语句的解析和编译的流程大致如下:

首先,Parse模块对SQL语句依次进行词法分析语法分析,并生成抽象语法树(abstract syntax tree, AST)。

然后,Compile模块会对Parse模块生成的AST依次进行

  • 合法性验证,比如验证SQL语句中的表是否存在;
  • 逻辑优化,SQL语句层面的优化,比如外连接变内连接、子查询优化、谓词下推;
  • 物理优化,结合统计信息,考虑全表扫描或走索引、以及索引选择;

并最终生成SQL的执行计划。该过程中需要的元数据和统计信息会缓存在memBuffer中。

行数据与KV的转化

对于聚簇表,TiDB会将表的编号加上主键作为Key,其余列作为Value;

对于非聚簇表,TiDB会自动为每行数据生成一个RowID。

SQL读写相关模块

Compile模块生成的执行计划会被发送给Executor模块。

涉及表连接、子查询、范围查询的复杂SQL会被Executor模块发送给DistSQL模块。DistSQL模块会将这些复杂SQL转化为对单表的操作的组合,然后通过TiKV Client发送给TiKV节点。

如果是涉及唯一索引的等值查询(只获取零行或者一行数据),则会由KV模块来处理。

如果涉及到事务,Transaction模块会在事务开始和事务提交时,通过PD Client向PD节点获取TSO时间戳。

在线DDL相关模块

Online DDL操作不会阻塞数据库的读写。

TiDB中的Online DDL操作需要TiDB Server节点上的start jobworkerschema load模块以及TiKV节点上的job queuehistory queue协同完成。

TiDB数据库中,同一时刻只能有一个TiDB Server做Online DDL操作。我们把当前时刻可以执行Online DDL任务的TiDB Server称为Owner

TiDB中Online DDL操作的调度流程大致如下:

  1. 不同用户连接到不同的TiDB Server,发出的DDL操作由start job模块接收,并由start job模块生成一个对应的job放到TiKV节点上的job queue队列中。

  2. 承担Owner角色的TiDB Server中的worker模块会从TiKV节点上的job queue中获取Online DDL的job来执行。执行完的job会被移动到history queue中,然后Owner接着从job queue中获取下一个job来执行。

  3. 当前的Owner任期结束时,会通过选举选出一个新的TiDB Server,作为新的Owner来执行Online DDL任务。同时,新的Owner中的schema load模块会将最新的所有表schema的信息同步到TiDB Server的缓存中。

TiDB的垃圾回收

TiDB Server中的GC模块负责清理MVCC中过期的数据版本

被选举为GC Leader的TiDB Server负责自己任期内的垃圾回收。GC Leader会记录一个名为Safe Point的时间戳,Safe Point之前的过期数据会被回收,以减轻数据库空间的压力。

GC每隔一段时间会定期触发一次,称之为GC Life Time,默认为10分钟。

TiDB Server的缓存

TiDB Server的缓存由以下部分组成:

  • SQL结果:如果SQL返回的结果集的数据分布在多个TiKV节点,汇总后的结果集会在TiDB Server的缓存中;
  • 线程缓存:前面提到的不同模块线程所使用的缓存;
  • 元数据、统计信息:解析和编译SQL使用到的元数据和统计信息,以及用户的认证信息等。

TiDB Server的缓存管理主要涉及到以下两个重要参数:

  • tidb_mem_quota_query:决定了每条SQL能够使用的最大缓存;
  • oom-action:决定了当单条SQL使用的内存超过tidb_mem_quota_query时,是中断SQL执行并报错、还是只记录日志。

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

相关文章

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、数据…

ES6—简介

目录 一、概述 二、扩展:Babel转码器 三、拓展:编译打包 一、概述 概念 ES6全称ECMAScript 6.0,是Javascript语言的下一代标准,2015年6月正式发布。 注意,ES6既是一个历史名词,也是一个泛指,…

深入浅出ES6(一):ES6是什么

深入浅出ES6(一):ES6是什么 作者 Jason Orendorff ,译者 刘振涛 发布于 2015年6月5日 | http://www.infoq.com/cn/articles/es6-in-depth-an-introduction 我的阅读清单 编者按:ECMAScript 6离我们越来越近了&#…

[ 前端开发 ] 为什么要学习ES6?

ECMAScript 6 概念 ECMAScript 6 简称 ES6 为什么要学习ES6? ES6 是 JavaScript 的下一个版本标准,诞生于2015年6月份。ES6 的主要目的是为了解决 ES5 的先天不足。ES6 的终极目标是为了使 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业…

前端基础之ES6

ES6 ES6简介 ES6实际上是一个泛指,泛指ES2015及后续版本 为什么使用ES6? 每一次标准的诞生都意味着语言的完善,功能的加强。JavaScript语言本身也有一些令人不满意的地方。 变量提升特性增加了程序运行时的不可预测性语法过于松散&#x…

第一节:ES是什么?ES6是什么?

系列文章目录 第一节:ES是什么?ES6是什么? 文章目录 系列文章目录前言一、ES是什么?二、ES6是什么? 前言 学习一下ES,都是自己学习的总结和理解,大家有什么问题都可以提出,一起讨论…