ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

GaussDB SQL 执行引擎:查询重写、优化器与执行器

GaussDB SQL 执行引擎:查询重写、优化器与执行器 SQL 执行引擎是 GaussDB 架构中占比很重的一部分理解一条 SQL 从解析到执行的完整链路是掌握性能优化和计划分析的基础。本文整理查询重写、路径搜索、执行器模块分工以及 PBE 执行模型相关的知识点。一、SQL 引擎整体流程一条 SQL 语句在 GaussDB 中大致经历四个阶段查询解析词法分析 / 语法分析 / 语义分析查询重写计划生成路径搜索查询执行SQL 是声明式语言解析阶段处理的是 “What”要什么优化器处理的才是 “How”怎么做。产物链大致为SQL → Token → 语法树 → 查询树 → 重写后的查询树 → 路径 → 计划树。二、查询重写查询重写通常使用关系代数来规范化表示查询并遵循两个基本原则等价性重写前后的查询结果必须一致高效性降低执行时间或资源消耗。常见的重写方向包括减少查询层次、消除冗余操作、选择下推、投影下推等。一个重要的约束是不能通过改变查询结果来换取速度。三、自底向上的路径搜索GaussDB 主要采用自底向上的路径搜索方式结合随机搜索其过程是先建立表的扫描算子再由扫描算子构成连接算子形成多个候选物理执行路径估算各路径代价选择代价最低的执行计划。记忆口诀先扫描再连接比代价选最低。四、执行器模块分工执行器由三个核心模块分工协作模块职责Portal根据解析结果选择处理策略和处理模块负责分流Executor处理查询及增删改等 DMLProcessUtility处理 DDL、游标、事务、表空间等实用语句记忆口诀Portal 分流Executor 做 DMLProcessUtility 做 DDL。执行器采用火山模型算子抽象为init()/get_next()/end()三个接口特点是控制流向下、数据流向上——上层算子通过get_next()驱动下层算子底层 Scan 从存储层取数。五、PBE 执行模型PBEParse-Bind-Execute是 GaussDB 执行 SQL 的重要模型分为三个报文Parse解析 重写结果存入计划缓存Bind生成定制计划Cplan或通用计划Gplan构造 PortalExecute执行。关键参数prepareThreshold默认值为5同一 SQL 执行超过 5 次后JDBC 不再发送 Parse 报文直接复用服务端缓存的解析结果。六、分布式执行分布式架构下有一些特有的算子需要了解Stream分布式特有算子负责节点间数据传输。GatherN:1把 DN 的结果汇总到 CN。Broadcast1:N把输入复制到所有节点。两者不能混淆Gather 是汇总Broadcast 是广播复制。小结查询重写用关系代数遵循等价性 高效性。自底向上路径搜索扫描 → 连接 → 最低代价。Portal 分流、Executor 做 DML、ProcessUtility 做 DDL。火山模型控制流向下、数据流向上。PBE 中prepareThreshold默认 5Gather 汇总、Broadcast 广播、Stream 分布式特有。
返回列表