SQL Optimizer 解析 | 青训营笔记

107 阅读4分钟

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

这节课程从大数据体系和SQL、常见的查询优化器、开源社区实践和大数据的前沿趋势四个方面介绍SQL。

整体的思维导图如下:

image.png

一、 大数据体系和SQL

1. SQL语言的特点:

  • 在数据处理中相比其他编程语言更简单,所用代码量更少;
  • 分析引擎都配备有SQL的接口

One SQL rules big data all

2. SQL的处理流程

image.png

(1)Parser

String->AST(abstract syntax tree) 目的是进行词法分析和语法分析。

实现方式有:

  • 递归下降
  • Flex和Bison(PostgreSQL)
  • JavaCC(Flink)
  • Antlr(Presto,Spark)

(2) Analyzer

AST->Logical Plan 目的是检查并绑定元信息、SQL合法性检查。

在逻辑层面上描述SQL对应的操作,不涉及具体实现的算法。

(3) 查询优化

找到一个正确且执行物理最小的物理执行计划。

(4) Executor

将逻辑计划拆分成执行计划子树(Plan Fragment)。 目的是最小化网络数据传输,利用数据的物理分布。执行计划连接依靠增加Shuffle算子,一边发送,一边接收。

Executor可单机并行和多机并行

二. 常见的查询优化器

两种分类方法:

1.遍历树划分

①Top-down Optimizer

从输出开始,由上往下遍历计划树

②Bottom-up Optimizer

从零开始,由下往上遍历计划树

2.根据优化方法划分

①Rule-based Optimizer(RBO)

基于启发式原则,只会访问元信息,不涉及具体数据,基于经验归纳得到优化原则。

RBO的优化方向可以从I/O、网络、CPU和内存几个方面考虑。

优化方法:

  • 列裁剪(从上往下扫描)
  • 谓词下推(先执行filter,但是有条件,对join有要求)
  • 传递闭包(根据表达式和过滤条件可以推导出新的过滤条件)
  • Runtime Filter(借助哈希表 获得的信息可以构造三种filter:min-max,in-list,bloom filter)

优点:实现简单,优化速度快

缺点:不保证得到最优的执行计划

②Cost-based Optimizer(CBO)

使用模型估算执行计划的代价,选择代价最小的。

image.png 其中算子代价包括CPU、内存、磁盘I/O、网络I/O等。 叶子算子Scan通过统计原始表数据,中间算子根据推导规则,从下层算子得到。

①原始表统计信息包括表或分区的级别,列级别。推导信息包括选择率和基数。

收集方式:DDL指定需要收集的、手动执行explain analyze statement、动态采样

②CBO假设列与列之间独立,对于关联的列由用户指定或数据库自动识别相关联的列;假设数据均匀分布,可以用直方图解决。 ③执行代价则用到的所有算子代价的总和。 ④通常使用贪心算法或者动态规划选出最优的执行计划

三. 社区开源实践

image.png 由图可知主流的大数据的优化器RBO和CBO都有。

Apache Calcite-流行

特点:模块化,插件化,稳定可靠

Calcite RBO

优化规则:Pattern(匹配表达式子树)、等价变换

匹配规则:深度优先、拓扑顺序、BOTTOM_UP

Calcite CBO-基于Volcano/Cascade

Memo:存储候选执行计划 本质是AND/OR graph 用共享子树减少内存开销

Group:等价计划集合

Top-down 动态规划搜索

剪枝:减少搜索空间

四. 前沿趋势

Big Date,Big Money

  • 对SQL优化器的新要求:
  • 引擎架构的进化(存储计算分离/一体化)
  • Cloud(云原生、severless)
  • 湖仓一体(数据湖和数据仓库结合在一起、Query Federation)
  • DATA+AI

AI4DB

AI可以为数据库做的工作:自配置(调参、负载预测调度)、自诊断和自愈合(错误恢复和迁移)、自优化(统计信息估计、代价估计、学习型优化器、索引/视图推荐)

DB4AI

数据库可以为AI提供的:内嵌人工智能算法、内嵌机器学习框架

五.总结

1.认识到SQL的重要地位,之前只是在单纯的使用SQL,这节课了解了SQL的处理流,其中优化器是最重要的部分。在小数据量上效果可能并不明显,但在大数据领域优化至关重要。

2.在多种查询优化器中有两种分类方式,两者可以相互叠加。RBO和CBO在企业中广为使用,掌握两种优化器是必需的。

3.从前沿趋势看,大数据方兴未艾,还有很大的发展空间,值得我们继续探索优化。