SQL Optimizer解析 | 青训营笔记

241 阅读4分钟

这是我参与[第四届青训营]笔记创作活动的第一天。

一、大数据体系

屏幕截图 2022-07-26 202058.jpg

二、SQL处理流程

1、为何SQL如此流行?

(1)有MYSQL、Oracle之类使用SQL作为交互语言的数据库。 (2)有JDBC、ODBC之类和各种数据库交互的标准接口。 (3)有大量不会使用编程语言但又要使用数据库的人。 (4)分析引擎中有相应的SQL接口。

2、SQL的一生

屏幕截图 2022-07-26 202935.jpg

(1)parser

1)把文本变成抽象语法树结构AST。2)涉及词法、语法分析阶段。3)和编译中前端相关。4)实现:递归下降等。

(2)Analyzer

1)访问库、表元信息并绑定。2)判断SQL是否合理。3)将AST转换成逻辑成AST。

(3)Logical Plan逻辑执行计划

(4)Optimizer 查询优化

1)目标:找到一个正确且执行代价最小的物理执行计划。

2)为什么优化?

因为SQL语句只描述做什么,却没告诉数据库该怎么做。查询优化在大数据中应用广泛。

(5)Physical Plan物理执行计划

1)Plan Fragment:执行计划子树。

2)目标:在小化网络数据传输。

3)增加shuffle算子。

(6)Excutor---单机并行和多机并行

三、常见查询优化器

(1)TOP-down Optimizer:从目标输出开始,由上往下遍历计划树找到最完整的最优执行计划。 Bottom-up Optimizer:从零开始,由下往上遍历计划执行树找到完整的最优执行计划。

(2)⭐Rule-based Optimizer(RBO):基于规则的,根据关系代数等价语义,重写查询。会访问表的元信息,不会涉及具体的表数据。Cost-based Optimizer(CBO):基于代价的,使用一个模型估算执行的代价,选择代价最小的执行计划。

1、RBO

(1)优化规则

列裁剪、谓词下推、传递闭包、Runtime Filter等。

(2)优化原则

I/O、NetWork、CPU&Memory。

(3)优点

实现简单、优化速度快。

(4)缺点

1)因为是基于计划的,所以不能保证得到最优的执行计划。2)多表连接,不知道那种顺序最优。3)不知道用哪种小表构建哈希表等。

2、CBO

(1)执行计划代价=所有算子执行代价之和。

通过RBO得到所有可能的等价执行计划。

(2)算子代价

1)算子代价是CPU、内存、磁盘I/O、网络I/O等代价。

2)算子代价和具体算子类型、以及算子的物理实现有关。

3)叶子算法:通过统计原始表数据得到。

4)中间算子:根据一定的推导规则,从下层算子的统计信息推导得到。

(3)公式

屏幕截图 2022-07-26 212253.jpg

1)其中计算算子代价和计算执行计划代价,选择不同公式不同。
2)统计信息
  • 原始表统计信息:

表、分区级别:行、行平均大小、表在磁盘中占用多少字节等。

列级别:min、max、num nulls(表空个数)、histogram(直方图)等。

  • 推导统计信息

选择率:对于某一个过滤条件,查询会从表中返回多大比例的数据。

基数:查询中常值算子需要处理的行数。(准确的基数,远比代价模型本身重要)

  • 收集方式

在DDL里指定需要收集的统计信息,数据库会在数据写入时收集、更新统计信息。

手动执行,触发数据库收集、更新统计信息。

动态采样。

(4)统计信息推导规则

  • filter selectivity运算法则
  • 考虑中国人口数据库、性别、年龄都不是均匀分布,用直方图。

(5)执行计划枚举

1)解决在RBO缺点。2)通常使用贪心算法、动态规划选出最优执行计划。

(6)CBO效果

1)开启CBO:减少数据量,提升速度比。

2)关闭CBO:shuffle数据量太大,执行效率差。

四、社区开源实现--Apache calcite概览

(1)优点

1)统一的SQL查询引擎。2)模块化、插件化、稳定可靠。3)支持异构数据模型:关系型,半结构化、流式等。4)内置RBO、CBO。

(2)Calcite RBO

  • Hep Planner

1)优化规则:1、pattern--匹配表达式子树。2、等价变化--得到新表达式。

2)匹配规则:深度优点、拓扑顺序等。

(3)Calcite CBO

  • Volcano Planner

1)基于Volcano/Cascade框架

2)Memo(搜索的空间是一个关系代数子树所组成的森林,保存这个森林的数据结构):存储候选执行计划--本质(AND/OR graph)

3)Group:等价计划集合

4)TOP-down:动态规划搜索,找最优计划。

(4)前沿趋势

屏幕截图 2022-07-26 220724.jpg

  • HTAP:事务型+分析型数据查询。
  • HSAP:分析型查询。
  • HTSAP:分析型+线上查询。
  • serveless:根据流量对数据流控。
  • 湖仓一体:湖、仓都是数据不规则的,湖仓一体把其优点结合。
(1) DATA+AI

1)AI4D8

  • 自配置:智能调参、负载预测/调度。
  • 自诊断和自愈合:错误恢复和迁徙。
  • 自优化:统计信息估计、代价估计、学习型优化器、索引

2)DB4AI

  • 内嵌人工智能算法。
  • 内嵌机器学习框架。