SQL Optimizer 解析 | 青训营笔记

153 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第1天
今天是大数据青训营的第一天,今天学习的内容是SQL Optimizer相关知识,主要分为四大内容:

1.大数据体系和SQL

大数据体系主要内容如下:

image.png

而SQL就是上图中分析引擎的内容

在SQL中流处理又可以分为如下四个部分:

Parser

  • string -> AST(抽象语法树)
    • 拆分字符串,得到关键字,常量等token
    • 将token组成AST node,最后将他们合起来成为一个AST
  • 实现:递归下降(ClickHous),Flex和Bisson(PostgreSQL),JavaCC(Flink),Antrl(Spark)

Analyzer 和 Logic Plan

Analyzer:

  • 检查并绑定一些元信息:databse,tables,column...
  • 检查SQL的合法性
  • AST -> Logic Plan

Logic Plan:

  • 逻辑的描述SQL对应的分步骤计算过程
  • 计算过程:算子(operater)

Optimizer

查询优化器

  • 目标:找到一个正确且执行带价最小的物理执行方案
  • 查询优化器是数据库的大脑,最复杂的模块
  • 一般SQL越复杂,Join的表越多,数据量越大,查询优化的意义就越大,性能相差可能成千上百倍

Physical Plan 和 Executor

Physical Plan:执行子计划树

  • 目标:最小化网络数据传输
  • 利用数据物理分布
  • 增加Shuffle算子

Executor:

  • 单机并行:cache,pipline,SIMD
  • 多机并行:一个fragment实现多个实例

2.常见的查询优化器

查询优化器可以按如下进行分类:

  • Top-down Optimizer
    • 由上到下进行遍历
    • 例子:SQLServer,Vocano/Cascade
  • Bottom-up Optimizer
    • 由下至上进行遍历
    • 例子:System R,Postgre SQL,IMB DB2

RBO:关系代数

  • 运算符
  • 运算关系:交换律、结合律、传递性
  • 优化原则:
    • IO优化
    • Network 网络优化
    • CPU 和 Memory优化

列剪枝:

image.png

谓词下推:

image.png

传递闭包:

image.png

Runtime Filter:

image.png

总结:

  • 优点:实现简单,优化速度快
  • 缺点:不保证能得到最优优化方案

CBO

概念:

  • 使用一个模型来估算执行计划的代价,选择代价最小的计划执行
  • 带价算子:CPU,内存,磁盘I/O,网络I/O等代价

统计信息:

  • 原始表统计信息
  • 推导统计信息:
    • 选择率
    • 基数

统计信息的推导规则:

image.png

可能会遇到的问题:

image.png

执行计划枚举:

  • 通常使用动态规划或者贪心算法来实现

CBO的效果:

image.png

3.开源社区实践

概览:

image.png

4.前沿趋势

概览:

image.png

DATE+AI

  • AI4DB
    • 自配置
    • 自诊断和自愈合
    • 自优化
  • DB4AI
    • 内嵌人工智能算法:(MySQL,SQLFlow)
    • 内嵌机器学习算法:(SprakML,Alink,dl-on-flink)