SQL 查询优化器 | 青训营笔记

68 阅读2分钟

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

1.大数据体系

1.基础设施,主要是ESC,存储,VPC,主要有日志查询管理组件。

2.存储设施,有HDFS,HBase,等自研的存储系统,有监控报警功能。

3.资源调度,有YARN,K8S,主要有用户管理功能。

4.分析引擎,主要分为三类,有批式分析,Spark,Hive,MR;有实时分析Flink;有交互分析Presto等。消息队列主要用Kafka等,主要用于存储的计算的解耦。主要功能是集群管理,服务管理。

5.权限管控,有Apache Ranger,GDPR,用来集群创建。

6.数据开发,主要有一个DAG任务流调度系统和Airflow,用来集群创建。

7.业务应用,有BI报表,数据挖掘,营销分析等,用来管控运维。

2.SQL处理流程

  • Parser(String -> AST (Abstruct Syntax Tree))

词法分析:将拆分字符串得到token

语法分析:将token祖成AST node,再祖成AST

  • Analyzer

检查并绑定Database, Table, Column等元信息

SQL的合法性检查,比如min/max/avg的输入是数值

AST -> Logical Plan

  • Logical Plan

逻辑地描述SQL对应的分步骤计算操作

计算操作:算子( operator )

  • Executor

单机并行: cache,pipeline, SIMD

多机并行: 一个fragment对应多个实例

3.SQL查询优化器

1.RBO(Rule-Based Optimization)

基于启发式规则

1.关系代数(略)

2.优化原则

  • I/O
  • NetWork
  • CPU/memory

3.列裁剪(剔除无用列)

4.谓词下推(将Filter向下推)

5.传递闭包(逻辑上利用Filter减少join数据)

6.Runtime Filter

小结

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

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

2.CBO(Cost-Based Optimizer)

基于动态规划和贪心算法

1.统计信息

2.计算算子代价

3.计算执行计划代价(通过RBO得到所有可能的执行计划)

4.执行计划枚举

总结

image.png