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

159 阅读4分钟

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

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

一、大数据体系概述

大数据体系主要包括七层,分别是:

1. 业务应用

业务应用层,主要包括BI报表、数据挖掘、营销分析、精准推荐,其主要的工作是管控运维。

2. 数据开发

数据开发层,主要技术包括Airflow、DAG,主要工作是集群创建。

3. 权限管控

权限管控层,主要技术包括Apache Ranger、GDPR,主要工作是集群创建。

4. 分析引擎(SQL)

分析引擎层,主要分为批式分析、实时分析、交互分析等,主要工作是集群管理、服务管理。

(1)批式分析 主要包括Spark、Hive、MR技术。 (2)实时分析 主要包括Flink技术。 (3)交互分析 主要包括Presto、ClickHouse、Doris技术。

5. 资源调度

资源调度层主要包括YARN、K8S技术,其主要工作是用户管理。

6. 存储系统

存储系统层次主要包括HDFS、HBase、NAS、Object Store、数据湖技术,其主要工作是监控报警。

7. 基础设施

基础设施层次主要包括ECS、存储、VPC技术,其主要工作是日志查询。

消息队列

消息队列比较特殊,位于下面五层之间,其中主要的技术是Kafka、Plusar、NSQ。

二、SQL的处理流程

SQL需要依次经过Parser,Analyzer,Optimizer和Executor的处理。

1.Parser将SQL语句得到一系列的token,将一系列token组成AST node,最终通过java cc解析成AST进行输出

2.Analyzer将检查并绑定元信息,将AST转变成Logical Plan,Logical Plan 逻辑地描述SQL对应的分步骤计算操作(算子)

3.Optimizer是查询优化,它可以跟踪优化器做出的各种决策并将跟踪结果记录在某表中,Physical Plan 执行计划子树,利用数据的物理分布(数据亲和性)并增加shuffle算子。

4.Executor分为单机与多机并行:

单机并行:cache,pipeline,SIMD。

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

常见的查询优化器

1、查询优化器的分类

1、Top-down Optimizer 从上往下遍历计划树,找到完整的最优执行计划

2、Bottom-up Optimizer 从下往上遍历计划树,找到完整的执行计划

3、Rule-based Optimizer 根据关系代数等价语义,重写查询;基于启发式规则;会访问表的元信息(catalog),不会涉及具体表数据(data)。

4、Cost-based Optimizer 使用一个模型估算执行计划的代价,选择代价最小的执行计划

2、RBO(Rule-based Optimizer)

关系代数分为运算符(select,project,join等)和等价变换(结合律 交换律 传递性)

优化原则分为Read data less and faster(I/O),Transfer data less and faster (Network),Process data less and faster(cpu&Memory)

列裁剪将不需要的列表信息直接裁剪出去,减少消耗

谓词下推将JOIN与FILTER交换,减少列表无用的信息

传递闭包 FILTER>123就能推出FILTER中pv.siteld>123

Runtime Filter 用(min-max in-list bloom filter)减小搜索范围

3、CBO(Cost-based Optimizer)

1.CBO使用代价模型和统计信息估算执行计划的代价

2.CBO使用贪心或者动态规划算法寻找最优执行计划

3.大数据场景下CBO对查询性能非常重要

三、社区开源实践

1、概览

Hive、Flink、Alibaba MaxCompute等:基于Apache Calcite,属于Volcano/Cascadek框架

Greenplum、HAWQ:自研Orca,属于Volcano/Cascadek框架

Alibaba Hologres(定位HSAP):基于Orca,属于Volcano/Cascadek框架

Spark、Presto、Doris、Alibaba OceanBase: 自研,RBO+CBO

ClickHouse:自研,RBO

2、社区开源实践

Apache Calcite

Calcite RBO

Calcite CBO

前沿趋势

1、引擎架构的进化

  • 存储计算分离
  • 一体化(HTAP、HSAP、HTSAP)

2、Cloud云原生

  • serverless

3、湖仓一体

  • Query Federation

4、DATA + AI

1、AI4DB

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

2、DB4AI

  • 内嵌人工智能算法(MLSQL,SQLFlow)
  • 内嵌机器学习框架(SparkML、Alink、dl-on-flink)

个人想法(总结)

在听了这节课后,首先是对大数据的整体体系有了初步的认识,了解了很多大数据的使用前景,对于SQL的查询优化器,学到了很多处理流程和所使用的算法,以及他们的优缺点。