【大数据笔记】SQL Optimizer 解析

前言

大数据课程相关笔记

一、大数据体系下的SQL 

一、大数据体系
大数据体系自上而下分为七层,分别是:

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等技术,主要工作是日志查询。

二、SQL的处理流程

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

1.Parser
(1)经过词法分析(拆分字符串,得到关键词、数值常量、字符串常量、运算符号等)得到token
(2)经过语法分析将token组成AST node组成AST node,最终得到一个AST

2.Analyzer
检查并绑定Database,Table,Column等元信息
SQL的合法性检查,比如min/max/avg的输入是数值
AST->Logical Plan

3.Optimizer
Optimizer是查询优化,它的主要工作是优化数据访问,根据提交的SQL语句,综合各种已有的信息(主要是系统编目表)来产生最优的可执行的访问方案。

4.Executor
Executor分为单机与多机并行。
单机并行包括:cache,pipeline,SIMD。
多机并行包括:一个fragment对应多个实例。

查询优化器是数据库大脑,在大数据场景下对查询性能至关重要。

查询优化器需要利用数据亲和性感知数据分布,按照最小化网络数据传输目标把逻辑计划拆分成多个物理计划片段。

二、常见的查询优化器

1.按照遍历树顺序划分

Top-down Optimizer

      从目标输出开始,由上往下遍历计划树,找到完整的最优执行计划。

比如:Volcano/Cascade,SQLServer。

Top-down Optimizer

     从零开始,由下往上遍历计划树,找到完整的执行计划。比如:System R ,PostgreSQL,IBM D82。

2.根据优化方法划分

Rule-based Optimizer(RBO)

      根据关系代数等价语义,重写查询

      基于启发式规则

      会访问表的元信息(catalog),不涉及具体的表数据(data)

1、RBO(Rule-based Optimizer)原理


ROB(Rule-based Optimizer)是基于规则的优化器,原理包括两方面:

●利用关系代数,即运算符: Select(σ),Project(π),Join(N),Rename(p) , Union( U )等

●利用等价变换:结合律 , 交换律 ,传递性

2、RBO优化规则:

●优化I/O:读更少数据,让其读数据更加快速。

●优化网络:传输数据更少,传输的更快。

●优化CPU & 内存:让CPU和内存占用更少。

3、RBO(Rule-based Optimizer)主要优化方式


(1)列剪裁
将不需要的列信息直接裁剪,大幅度减少查询时读取的读取数据量。
(2)谓词下推
将数据过滤条件向下推,大幅度减少join操作时所需要读取的数据。
(3)传递闭包
利用等价条件和过滤条件推出新的过滤条件,从而在谓词下推操作的基础上再次减少join操作所需要读取的数据量。
(4)Runtime Filter
在运行时利用列数据的min-max,in-list等信息减少Filter操作时所需要读取的数据量。

4、RBO(Rule-based Optimizer)小结

  • 主流RBO实现一般都有几百条基于经验归纳得到的优化规则。
  • 优点:实现简单,优化速度快。
  • 缺点:不保证得到最优的执行计划。

Cost-based Optimizer(CBO)

      使用一个模型估算执行计划的代价,选择代价最小的执行计划。

1、CBO概念
CBO(Cost-Based Potimizer)是基于成本的优化器,它使用一个模型估算执行计划,选择代价最优的执行计划,执行计划的代价等于所有算子的执行代价之和,通过RBO得到(所有)可能的等价执行计划。
算子的代价包括CPU、内存、磁盘I/O、网络I/O等代价。

2、CBO过程
统计信息+推导规则->计算算子代价->计算执行计划代价->执行计划枚举

3、统计信息
(1)统计信息
统计信息包括原始表统计信息和推导统计信息。

(2)统计信息的收集方式
统计信息收集方式包括DDL中收集,手动执行explain、analyze、statement触发数据库收集或者更新统计信息,动态采样等。

(3)统计信息推导规则(前提假设列和列之间独立,列的值是均匀分布)
①AND条件: fs(a AND b) = fs(a) * fs(b)
②OR条件: fs(a OR b) = fs(a) + fs(b) - (fs(a) * fs(b))
③NOT条件: fs(NOT a) = 1.0- fs(a)
④等于条件(x = literal) literal < min && literal > max: 0 V1/NDV
⑤小于条件 (x < literal) literal < min: 0 literal > max: 1 (literal - min) / (max - min)

4、执行计划枚举
通常使用贪心算法或动态选出最优的执行计划。

5、CBO小结

  • CBO使用代价模型和统计信息估算执行计划的代价。
  • CBO利用贪心算法或者动态规划算法寻找最优的执行计划。
  • 在大数据场景下CBO对查询性能非常重要。


 

你可能感兴趣的:(大数据学习笔记,大数据,sql)