SQL社区总览 | 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的的第4天
RBO与CBO的比较
- 主流 RBO 实现一般都有几百条基于经验归纳得到的优化规则
- RBO 实现简单,优化速度快
- RBO不保证得到最优的执行计划
- CBO使用代价模型和统计信息估算执行计划的代价
- CBO使用贪心或者动态规划算法寻找最优执行计划
- 大数据场景下CBO对查询性能非常重要
社区开源实践
概览
Volcano/Cascade框架,较为通用,是一个优化器的实现框架,没有具体的代码或者项目,描述优化器怎么实现。
Apache Calcite概览
-
One size fits all:统一的SQL查询引擎
-
模块化,插件化,稳定可靠
-
支持异构数据模型
- 关系型
- 半结构化
- 流式
- 地理空间数据
-
内置 RBO和CBO
结构
在上述图中,组件核心是这个查询优化器
首先一个SQL进来之后,会经过JDBC,
然后会经过Parser和Validator
继续对SQL做检验和解析,
其次解析之后得到一个抽象语法数
把抽象语法数转换成一个关系表达式。(关系表达式既包括了那个算子,也包括Validator里面的一些表达式,比如说a=b等)
上述为第一条路径:能够对接不同的处理系统嘛。所以提供了一个表达式
也可以不经过那个语法解析,直接去构建出这么关系表达式,得到这个关系表达式之后,进入到查询优化器的内容,查询优化器会去Metadata里面取出一些信息,去对这个查询优化。
Calcite RBO
-
HepPlanner
-
优化规则(Rule)
- Pattern:匹配表达式子树
- 等价变换:得到新的表达式
-
内置有100+优化规则
-
四种匹配规则
- ARBITRARY/DEPTH_FIRST:深度优先
- TOP DOWN:拓扑顺序
- BOTTOM_ UP:与TOP_DOWN 相反
-
遍历所有的rule,直到没有rule可以被触发
-
优化速度快,实现简单,但是不保证最优
-
Calcite CBO
-
VolcanoPlanner
-
基于Volcano/Cascade框架
-
成本最优假设
-
Memo:存储候选执行计划
- Group:等价计划集合
-
Top-down 动态规划搜索
-
-
应用Rule搜索候选计划
-
Memo
- 本质:AND/OR graph
- 共享子树减少内存开销
小结
- 主流的查询优化器都包含RBO和CBO
- Apache Calcite是大数据领域很流行的查询优化器
- Apache Calcite RBO定义了许多优化规则,使用pattern 匹配子树,执行等价变换
- Apache Calcite CBO基于Volcano/Cascade框架
- Volcano/Cascade 的精髓:Memo、动态规划、剪枝
前沿趋势
概览
DATA+AI
-
AI4DB
-
自配置
- 智能调参(OtterTune,QTune)
- 负载预测/调度
-
自诊断和自愈合:错误恢复和迁移
-
自优化:
- 统计信息估计( Learned cardinalities )
- 代价估计
- 学习型优化器(M DB2E)
- 索引/视图推荐
-
-
DB4AI
- 内嵌人工智能算法(MLSQL,SQLFlow)
- 内嵌机器学习框架(SparkML,Alink,dl-on-flink )
小结
- 大数据创业如火如荼,SQL查询优化器仍然是必不可少的一个重要
- 组件引擎架构的进化、云原生、湖仓一体等对SQL查询优化器有新的要求和挑战
- Al加持,学习型查询优化器在不断进化

浙公网安备 33010602011771号