大数据体系
SQL 的处理流程
-
Parser (SQL -> AST)
- 词法分析:拆分字符串得到关键词(token)
- 语法分析:通过 token 得到抽象语法树(AST)
-
Analyzer(AST -> Logical Plan)
-
检查并绑定 database、table、column 等元信息
-
SQL 的合法性检查,比如 min 的输入是数值,表是否存在等
-
Logical Plan : 逻辑的表述 SQL 的分步骤计算操作,得到逻辑计划树
所谓逻辑计划树,可以理解为逻辑地描述一个 SQL 如何一步步地执行查询和计算,最终得到执行结果的一个分步骤地计划。树中每个节点是是一个算子,定义了对数据集合的计算操作(过滤,排序,聚合,连接),边代表了数据的流向,从孩子节点流向父节点。之所以称它为逻辑的,是因为算子定义的是逻辑的计算操作,没有指定实际的算法,比如对于逻辑的排序算子,逻辑计划树里没有指定使用快排还是堆排。
-
-
Optimizer(Logical Plan -> Physical Plan)
- 本节的重点:查询优化,找到执行代价最小的正确的物理执行计划。
-
Executor(Physical Plan -> )
Plan Fragment:执行计划子树
- 目标:最小化网络数据传输
- 利用上数据的物理分布(数据亲和性)
- 增加 shuffle 算子
Execulor
- 单机并行:cache、pipeline、SIMD
- 多机并行:一个 fragment 对应多个实例
常见的查询优化器
分类:
-
Top-down Optimizer:由上往下遍历整个计划树,找到最优执行计划。
-
Bottom-up Optimizer:由下往上遍历计划树,找到完整的执行计划。
-
Rule-based Optimizer (RBO)
- 根据关系代数等价语义,重写查询
- 基于启发式规则
- 会访问表的元信息,不会涉及具体表数据
-
Cost-based Optimizer(CBO)
- 使用一个模型估算执行计划的代价,选择代价最小的执行计划
RBO-基于关系代数
- 运算符:select,project,join,rename,union 等
- 等价变换:结合律,交换律,传递性
优化方法:
- 列裁剪
- 谓词下推
- 传递闭包
- Runtime Filter
CBO
综合各种算子的代价,选择一个代价最小的执行计划。模型的估算主要是通过统计信息得到的。
统计信息:
- 原始表统计信息(行数,大小等)
- 推导统计信息:选择率(过滤条件返回数据的比例)、基数(算子需要处理的行数))
统计信息的收集方式:
- 在 DDL 里指定需要收集的统计信息
- 手动执行
explain analyze statement,触发数据库收集或者更新统计信息 - 动态采样,
select count(*) from table_name
统计信息推导规则:
- 假设列和列之间是独立的,列的值是均匀分布
- fs(a AND b) = fs(a) * fs(b) ...
统计信息的问题:
- 假设不成立
执行计划枚举:
- 贪心或动态规划
小结
- 主流 RBO 实现一般都有几百条基于经验归纳得到的优化规则
- RBO 实现简单,优化速度快
- RBO 不保证得到最优的执行结果
- CBO 使用代价模型和统计信息估算执行计划的代价
- CBO 使用贪心或者动态规划算法寻找执行计划
- 大数据场景下 CBO 对查询性能非常重要
社区开源实践
Apache Calcite 概览
-
统一的 SQL 查询引擎
-
模块化,插件化,稳定可靠
-
支持异构数据模型
- 关系型
- 半结构化
- 流式
- 地理空间数据
-
内置 RBO 和 CBO
Calcite RBO
-
hepPlanner
-
优化规则
- Pattern 匹配表达式子树
- 等价变换 得到新的表达式
-
内置有 100+ 优化规则
-
四种匹配规则
- DEPTH_FIRST 深度优先
- TOP_DOWN 拓扑排序
- BOTTOM_UP 与上面的相反
-
遍历所有的 rule ,直到没有 rule 可以被触发
-
优化速度快,实现简单,但是不保证最优
-
Calcite CBO
-
VolcanoPlanner
-
基于 Volcano/Cascade 框架
-
成本最优假设
-
Memo:存储候选执行计划
- Group:等价计划集合
- 本质:AND/OR graph
- 共享子树减少内存开销
-
Top-down:动态规划搜索,选择 winner 构建最优执行计划
-
应用 Rule搜索候选计划
-
Group winner:目前的最优计划
-
剪枝:减少搜索空间
-
前沿趋势
对 SQL 优化器的新要求:
-
引擎架构的进化
- 存储计算分离
- 一体化(HTAP,HSAP,HTSAP)
-
Cloud
- 云原生
- serverless
-
湖仓一体
- Query Federation
-
DATA + AI