这是我参与「第四届青训营 」笔记创作活动的的第1天
今天是大数据青训营的第一天,今天学习的内容是SQL Optimizer相关知识,主要分为四大内容:
1.大数据体系和SQL
大数据体系主要内容如下:
而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优化
列剪枝:
谓词下推:
传递闭包:
Runtime Filter:
总结:
- 优点:实现简单,优化速度快
- 缺点:不保证能得到最优优化方案
CBO
概念:
- 使用一个模型来估算执行计划的代价,选择代价最小的计划执行
- 带价算子:CPU,内存,磁盘I/O,网络I/O等代价
统计信息:
- 原始表统计信息
- 推导统计信息:
-
- 选择率
-
- 基数
统计信息的推导规则:
可能会遇到的问题:
执行计划枚举:
- 通常使用动态规划或者贪心算法来实现
CBO的效果:
3.开源社区实践
概览:
4.前沿趋势
概览:
DATE+AI
- AI4DB
-
- 自配置
-
- 自诊断和自愈合
-
- 自优化
- DB4AI
-
- 内嵌人工智能算法:(MySQL,SQLFlow)
-
- 内嵌机器学习算法:(SprakML,Alink,dl-on-flink)