这是我参与「 第四届青训营 」笔记创作活动的的第一天
课上内容主要为以下四个板块
1. 大数据体系和 SQL
One SQL rules big data all 用SQL来处理大数据
graph LR
Start--SQL-->Parser--AST-->Analyzer--Logical Plan-->id1((Optimizer))--Physical Plan-->Executor
- 抽象语法树(Abstract Syntax Tree,AST)
- 逻辑计划(Logical Plan)
- 物理计划(Physical Plan)
- 解析器(Parser)
- 分析器(Analyzer)
- 优化选择器(Optimizer)
- 算子(Operator)
Optimizer和Operator的角色最为重要,此处可以适时联想一下machine learning中关于BGD、SGD、 Adam、AdaGrad相关的内容。
2. 常见的查询优化器
- Top-down Optimizer
- eg. Volcano、Cascade、SQLServer
- Bottom-up Optimizer
- eg. System R、PostgreSQL、IBM、DB2
- RBO
- 优化 I/O
- 优化 Network
- 优化 CPU & Memory
- RBO 优化规则
- 列裁剪
- 谓词下推
- 传递闭包
- Runtime Filter(min-max filter,in-list filter,bloom filter)
- Join 消除
- 谓词合并
- CBO
- Number of Distinct Value,NDV
- Selectivity
- Cardinality
基于规则的RBO中的列减少和谓词下推的方法是要实现尽早的过滤,而传递闭包的方法则是创造Filter使其继续下推,让整体的查找选择性能更优。
基于代价的CBO则是使用一个模型估算执行计划的代价,利用Filter Selectivity这一信号量来选择代价最小的执行计划让整体的查找选择性能更优。
3. 查询优化器的社区开源实践
Apache Calcit是大数据领域很流行的查询优化器
其中的HepPlanner是基于RBO使用pattern匹配子树,执行等价代换来实现最终性能最优
- HepPlanner内置有100+优化规则
- 四种匹配机制
- ARBITRARY : 深度优先
- TOP_DOWN : 拓扑排序
- BOTTOM_UP : 自底向上
- TOP_DOWN : 自顶向下
其原理为通过遍历所有的规则直到没有规则可以被触发,这样一来虽然优化速度快且实现简单但是无法保证性能最优
其中的Volcano Planner是基于Volcano/Cascade框架通过对成本进行最优假设来实现最终性能最优
- Memo存储候选执行计划
- 本质AND/OR graph
- 共享子树减少内存开销
- Group等价计划集合
- Group winner实现目前最优计划
- 剪枝(Branch-and-bound pruning)减少搜索空间
其原理通过利用Top-down动态规划搜索,通过选择winner构建最优执行计划
4. SQL 相关的前沿趋势
- 选择引擎架构的进化【存储计算分离】
- 一体化(HTAP,HSAP,HTSAP)
- 湖仓一体 Query Federation
- 数据库和AI联系在一起
- AI4DB
- 自配置
- 智能调参(OtterTune,QTune)
- 负载预测/调度
- 自诊断和自愈合:错误恢复和迁移
- 自由化
- 统计信息估计
- 代价估计
- 学习型优化器(IBM DB2 LEO)
- 索引/视图推荐
- DB4AI
- 内嵌人工智能算法(MLSQL,SQLFLow)
- 内嵌机器学习框架(SparkML,Alink,dl-on-flink)
- AI4DB