TiDB数据库SQL执行流程

DML语句读流程概要

663994213.jpg


sql语句先到Protocol Layer接收,再到PD节点获取TSO(sql语句读的开始时间),再到词法解析和语法解析为AST语法树,到Compile模块,会区分点查和非点査,到Execute执行器,从TiKV中读取信息,读取的信息再交由Execute返回给用户。
DML 语句写流程概要

DML 语句写流程概要

-885537144.jpg


把需要修改的数据读出来放到缓存(memBuffer)中,在缓存中修改,当用户将修改提交,进行两阶段提交,prewrite和commit,到PD节点中去读取事务结束时间。
要获取两个时间

DDL 流程概要

image.png


用户发出DDL语句,由start job接受,再将语句放到TiKV中的队列,
job queue:除了加索引以外的DDL操作,一个操作叫一个job,在这里面进行排队
add index queue:加索引的操作

### SQL 请求处理流程 TiDB 是一个分布式数据库系统,其处理 SQL 请求的过程涉及多个组件的协作,包括 TiDB Server、PD(Placement Driver)和 TiKV。整个流程可以分为以下几个关键步骤: #### SQL 请求接收与解析 用户发送的 SQL 请求会直接或通过负载均衡器(Load Balancer)发送到 TiDB Server,TiDB Server 会解析 MySQL 协议数据包,获取请求内容。这一阶段包括词法解析和语法解析,将 SQL 语句解析为抽象语法树(AST)[^2]。 #### 查询优化与执行计划生成 在完成解析后,TiDB 会对查询进行逻辑上的等价变换,使得查询在逻辑执行计划上更易于处理。接着,根据数据分布情况和算子的执行开销,生成最终的查询执行计划。TiDB 支持在执行 PREPARE 语句时开启缓存,以降低生成执行计划的开销[^3]。 #### 执行计划执行与数据读取 TiDB 执行引擎采用 Volcano 模型运行,所有的物理执行器(Executor)构成一个树状结构,每一层通过调用下一层的 `Next/NextChunk()` 方法获取结果。执行器会根据生成的执行计划,向 PD 查询所需数据所在的 TiKV Region,并与 TiKV 交互以获取和处理数据[^4]。 #### 数据持久化与返回结果 所有数据最终存储在 TiKV 集群中,因此在执行查询计划的过程中,TiDB Server 需要与 TiKV 进行交互,获取数据。读取数据后,执行器会将结果返回给用户[^1]。 #### 示例:SQL 执行流程简化模拟 以下是一个简化版的 SQL 执行流程模拟代码,展示 TiDB 如何解析 SQL执行查询计划: ```python class SQLExecutor: def __init__(self): self.parser = SQLParser() self.optimizer = SQLOptimizer() self.executor_engine = VolcanoExecutor() def execute_sql(self, sql): # 解析 SQL 语句 ast = self.parser.parse(sql) # 优化查询计划 optimized_plan = self.optimizer.optimize(ast) # 执行查询计划 result = self.executor_engine.run(optimized_plan) return result class SQLParser: def parse(self, sql): # 模拟 SQL 解析为 AST print("Parsing SQL to AST") return "AST" class SQLOptimizer: def optimize(self, ast): # 模拟查询优化 print("Optimizing query plan") return "Optimized Plan" class VolcanoExecutor: def run(self, plan): # 模拟 Volcano 执行模型 print("Executing query using Volcano model") return "Query Result" # 示例使用 executor = SQLExecutor() result = executor.execute_sql("SELECT * FROM table WHERE id > 1") print("Query Result:", result) ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值