浅谈SQL-Optimizer解析|青训营笔记

101 阅读3分钟

大数据体系和SQL

1.1大数据体系

SQL已经成为实时处理的接口,并且比c语言简单易用,最终目标SQL处理所有大数据

1.2大数据体系和SQL

1.3SQL的处理流程

sql的基本流程 解析 image.png

1.Parser(分析):

string》》AST(abstract syntax tree)

词法分析:拆分字符串的到token(key,数值常量,字符串常量,运算符)

语法分析:将token组成AST node,组合成完整的AST

image.png

2.Analyzer和Logical Plan

image.png

3.查询优化

image.png

Physical Plan 和 Excutor

image.png

01总结

image.png

常见的查询优化器

  1. top-down optimizer:从输出目标开始,自上而下遍历计划树,找最完整最优的执行计划
  2. bottom-up optimizer:从零开始,自下而上,寻找最完整的执行计划
  3. RBO(Rule-based Optimizer):根据关系代价等价语义,重写查询,启发式规则,会访问元数据但不会涉及具体表数据
  4. CBO(Cost-based Optimizer):使用模型估算执行计划的代价,选择代价最小的执行计划

RBO-关系代数

  • 运算符:select(σ),project(π),join(∩),rename(ρ),union(∪)
  • 等价变换:结合律,交换律,传递性

image.png

RBO—优化原则

优化I/O 优化Network 优化CPU或Memory、

image.png

RBO的几种优化

image.png

image.png

image.png

image.png

RBO总结

  • 主流的RBO实现一般都有几百条基于经验归纳得到的优化规则
  • 优点:简单,速度快
  • 缺点:不保证得到最优执行计划

COB-概念

image.png

COB-统计信息

image.png

COB-信息收集方式

image.png

COB-统计信息推导规则

image.png

CBO统计信息的问题

image.png

CBO总结

  • CBO使用代价模型和统计估算执行计划的代价
  • CBO使用贪心和动态算法找最优解

02总结

  • RBO都有几百条规则经验得到优化规则
  • RBo简单,快速,但是可能得不到最优解
  • CBO能找到最优解,使用代价模型和统计信息来估算代价

社区开源实践

Apache Calcite:

  • 统一的SQL查询引擎
  • 模块化,插件化,稳定可靠
  • 支持异常结构的数据模型
  • 内置RBO和CBO

calcite RBO

  • HepPlanner
  1. 优化规则(Rule)
  2. Pattern:匹配表达树
  3. 等价变换:得到新的表达式
  4. 内置一百多个优化规则
  5. 四个匹配机制:深度,拓扑,BOTTOM_UP,TOP_DOWN
  6. 遍历所有rule,知道所有被遍历
  7. 优化速度快,简单,但是不是最优

calcite CBO

  • VolcanoPlanner
  • 基于Volcano/Cascade框架
  • 最优假设
  • Memo:存储候选执行计划
    • 本质:AND/OR graph
    • 共享树减少内存开销
  • Group:等价计划集合
    •     Group winner:目前最优计划
      
  • Top-DOWN:动态搜索,
  1. 选择winner构建执行最有计划
    
  • 应用Rule搜索候选计划

前沿趋势

- 引擎架构的进化

计算存储分离(干湿分离) 一体化(HTAP,HSAP,HTSAP)

- Cloud

云原生,serverless

- 湖仓一体

Query Federation

- DATA+AL

AL4DB

  • 自配置
  1. 智能调参(OtterTune,QTune)
    
  2. 负载均衡和调度
    
  • 自诊断和自愈合:错误恢复和迁移
  • 自优化
  1. 统计信息估计
    
  2. 代价估计
    
  3. 学习型优化器
    
  4. 索引/视图推荐
    

DB4AL

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

小结

  • SQL不可或缺
  • 引擎架构进化,云原生,湖仓一体对SQL查询优化器有新的要求和挑战
  • AI加持,学习型查询优化器在不断进化