这是我参与「第四届青训营 」笔记创作活动的第1天
SQL Optimizer 解析
大数据体系
课程目录:
1. 大数据体系和SQL
2. 常见的查询优化器
3. 前沿趋势
一、大数据体系和SQL
SQL的处理流程
Parser String -> AST(abstract syntax tree)
- 词法分析:拆分字符串,得到关键词、数值常量、字符串常量、运算符号
- 语法分析:将token组成AST node,最终得到一个AST
实现:递归下降、Flex和Bison JavaCC Antlr
Analyzer 和Logical Plan
- Analyzer
- 检查并绑定Database Table Column等元信息
- SQL的合法性检查
- AST -> Logical Plan
- Logical Plan
- 逻辑得描述SQL对应得分步骤计算操作
- 计算操作:算子 operator
查询优化
- SQL是一种声明式语言,用户只描述做什么
- 目标:找到一个正确且执行代价最小的物理执行计划
- 查询优化器是数据库的大脑,最复杂的模块,属于NP
- 一般SQL越复杂,Join的表越多,数据量越大,不同的执行方式的性能差别有成百上千倍。
Physical Plan & Executor
- Plan Fragment
目标:最小化网络数据传输
利用上数据的物理分布 数据亲和性
增加Shuffle算子
- Executor
单机并行:cache pipeline SIMD 多机并行:一个fragment对应多个实例
小结
- one SQL rules big data all
- SQL需要依次经过Parser Analyzer Optimizer Executor的处理
- 查询优化器是数据库的大脑,在大数据场景下对查询性能至关重要
- 查询优化器需要感知数据分布,充分利用数据的亲和性。
- 查询优化器按照最小化网络传输的目标把逻辑计划拆分成多个物理计划片段。
二、常见的查询优化器
2.1 查询优化器分类
2.2.1 RBO 关系代数
Select Project Join Rename Union
结合律、交换律、传递性
2.2.2 RBO优化原则
- 优化数据 I/O
- 优化网络
- 优化cpu和内存
2.2.3 RBO 列裁剪 谓词下推
2.2.4 RBO 传递闭包
2.2.5 RBO Runtime Filter
2.2.6 RBO小结
- 主流RBO实现一般都有几百条基于经验归纳得到的优化规则
- 优点:实现简单,优化速度快
- 缺点:不保证得到最优的执行计划。
2.3 CBO
- 使用一个模型估算执行计划的代价,选择代价最小的执行计划(执行计划的代价等于所有算子的执行代价之和、通过RBO得到可能的等价的执行计划)
- 算子代价:CPU 内存 磁盘IO 网络IO
- CBO使用代价模型和统计信息估算执行计划的代价
- CBO使用贪心或者动态规划算法寻找最优执行计划
- 在大数据场景下CBO对查询性能非常重要
三、前沿趋势
Big Data Big Money
- 引擎架构的进化
- Cloud 云原生
- 湖仓一体
- DATA + AI