SQL查询优化器浅析 | 青训营笔记

103 阅读3分钟

SQL查询优化器浅析 | 青训营笔记

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

大数据体系图

image.png

1.大数据体系和SQL

1.1 大数据体系-One SQL rules big data all

image.png SQL在分析引擎中占有很重要的地位

1.2 SQL的处理流程

image.png

1.2.1 Parser

String->AST(abstract syntax tree)

  1. 词法分析:拆分字符串,得到关键词、数值常量、字符串常量、运算符号等token
  2. #语法分析:将token组成AST node,最终得到一个AST 实现:递归下降(ClickHouse),Flex和Bison(PostgreSQL),JavaCC(Flink),Antlr(Presto,Spark)

image.png

1.2.2 Analyzer和Logical Plan

Analyzer

  1. 检查并把规定Database,Table,Column等元信息
  2. SQL的合法性检查,比如min/max/avg的输入必须要是数值
  3. AST->Logical Plan Logical Plan
  4. 逻辑地描述SQL对应的分步骤计算操作
  5. 计算操作:算子(operator)

image.png

image.png

1.2.3 查询优化

  1. SQL是一种声明式语言,用户只描述做什么,没有告诉数据库怎么做
  2. 目标:找到一个正确切执行代价最小的物理执行计划
  3. 查询优化器是数据库的大脑,最复杂地模块,很多相关问题都是NP的
  4. 一般SQL越复杂,Join的表越多,数据量越大,查询优化的意义就越大,因为不同执行方式的性能差别可能有成百上千倍数

1.2.4 Physical Plan 和 Executor

Plan Fragment:执行计划子树

  1. 目标:最小化网络数据传输
  2. 利用上数据的物理分布(数据亲和性)
  3. 增加Shuffle算子 Executor
  4. 单机并行:cache,pipeline,SIMD
  5. 多机并行:一个fragment对应多个实例

image.png

1. 小结

  1. One SQL rules big data all
  2. SQL需要依次经过Parser,Analyzer,Optimizer和 Executor的处理
  3. 查询优化器是数据库的大脑,在大数据场景下对查询性能至关重要
  4. 查询优化器需要感知数据分布,充分利用数据的亲和性
  5. 查询优化器按照最小化网络数据传输的目标把逻辑计划拆分成多个物理计划片段

2.常见的查询优化器

2.1查询优化器分类

image.png

2.2 RBO

2.2.1 RBO-关系代数

image.png

2.2.2 RBO-优化原则

image.png

2.2.3 RBO-列裁剪

image.png

image.png

2.2.4 RBO-谓词下推

image.png

image.png

2.2.5 RBO-传递闭包

image.png 利用传递性 image.png

2.2.5 RBO-Runtime Filter

image.png

image.png

  1. min-max 适合较为集中的数据
  2. in-list 适合分数的数据
  3. bloomfilter 一一对应,效率高

2.2 RBO小结

image.png 缺点:选择执行计划的方式比较死板

2.3 CBO-概念

image.png

2.3.1 CBO-统计信息

image.png

信息收集方式(3种)

image.png

统计信息推导规则

image.png

统计信息推导存在的问题

image.png

2.3.2 CBO-执行计划枚举

image.png

动态规划

先找出子问题最优,进而推断出整体最优 image.png

image.png

image.png

image.png

image.png

image.png

CBO效果-TPC-DS Q25

关闭开启对比 image.png

image.png

image.png

image.png

2.3 CBO小结

image.png

2.小结

image.png

3.社区开源实践

概览

image.png

Apache Calcite

Apache Calcite概览

image.png

Apache Calcite RBO

image.png

Apache Calcite CBO

image.png

image.png

image.png

image.png

image.png

3.小结

image.png

4.前言趋势

image.png

概览

image.png

DATA+AI

image.png

4.小结

image.png