SQL社区总览 | 青训营笔记

这是我参与「第四届青训营 」笔记创作活动的的第4天

RBO与CBO的比较

  • 主流 RBO 实现一般都有几百条基于经验归纳得到的优化规则
  • RBO 实现简单,优化速度快
  • RBO不保证得到最优的执行计划
  • CBO使用代价模型和统计信息估算执行计划的代价
  • CBO使用贪心或者动态规划算法寻找最优执行计划
  • 大数据场景下CBO对查询性能非常重要

社区开源实践

概览

image-20220727141149406

Volcano/Cascade框架,较为通用,是一个优化器的实现框架,没有具体的代码或者项目,描述优化器怎么实现。

Apache Calcite概览

  • One size fits all:统一的SQL查询引擎

  • 模块化,插件化,稳定可靠

  • 支持异构数据模型

    • 关系型
    • 半结构化
    • 流式
    • 地理空间数据
  • 内置 RBO和CBO

image-20220727141558765

结构

在上述图中,组件核心是这个查询优化器

首先一个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可以被触发

    • 优化速度快,实现简单,但是不保证最优

image-20220727143131439

Calcite CBO

  • VolcanoPlanner

    • 基于Volcano/Cascade框架

    • 成本最优假设

    • Memo:存储候选执行计划

      • Group:等价计划集合
    • Top-down 动态规划搜索

image-20220727143835816

  • 应用Rule搜索候选计划

  • Memo

    • 本质:AND/OR graph
    • 共享子树减少内存开销

image-20220727144246018

小结

  • 主流的查询优化器都包含RBO和CBO
  • Apache Calcite是大数据领域很流行的查询优化器
  • Apache Calcite RBO定义了许多优化规则,使用pattern 匹配子树,执行等价变换
  • Apache Calcite CBO基于Volcano/Cascade框架
  • Volcano/Cascade 的精髓:Memo、动态规划、剪枝

前沿趋势

概览

image-20220727144417717

DATA+AI

  • AI4DB

    • 自配置

      • 智能调参(OtterTune,QTune)
      • 负载预测/调度
    • 自诊断和自愈合:错误恢复和迁移

    • 自优化:

      • 统计信息估计( Learned cardinalities )
      • 代价估计
      • 学习型优化器(M DB2E)
      • 索引/视图推荐
  • DB4AI

    • 内嵌人工智能算法(MLSQL,SQLFlow)
    • 内嵌机器学习框架(SparkML,Alink,dl-on-flink )

小结

  • 大数据创业如火如荼,SQL查询优化器仍然是必不可少的一个重要
  • 组件引擎架构的进化、云原生、湖仓一体等对SQL查询优化器有新的要求和挑战
  • Al加持,学习型查询优化器在不断进化

总结

image-20220727145554402

posted @ 2022-07-28 14:11  Luciferpluto  阅读(1)  评论(0)    收藏  举报  来源