SQL Optimizer 解析(01) | 青训营笔记

108 阅读2分钟

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

本节课主要内容

  • 大数据体系和SQL
  • 常见的查询优化器
  • 社区开源实战
  • 前沿趋势

01大数据体系和SQL

主要介绍大数据体系和SQL的处理流程,重点介绍SQL在分布式环境下的处理

(1)大数据中的SQL

image.png

(2)SQL处理流程(重点⭐)

SQL-->Parser(AST)-->Analyzer(Logical Plan)-->Optimizer(Physical Plan)-->Executor

01)Parser

功能:String-->AST(abstract syntax tree)

字符串-->关键字、字符串常量等token-->将token组成AST node-->AST

02)Analyzer

功能:访问库/表元信息并绑定;判断 SQL 是否合理;将 AST 转换成逻辑计划树

*Logical Plan *(理解⭐⭐):

逻辑地描述一个 SQL 如何执行查询和计算,最终得到执行结果的一个分步骤地计划。树中每个节点是一个算子,定义了对数据集合的计算操作,边代表了数据的流向,从孩子节点流向父节点。

举例说明:

SELECT country.name, SUM(weblog.bytes) as total
FROM country
INNER JOIN geoip ON country.id = geoip.country_id
INNER JOIN weblog ON geoip.host = weblog.host
WHERE weblog.reply = "200" and weblog.host is not null
GROUP BY country.name
ORDER BY total
LIMIT10

逻辑计划树如下图所示:

image.png

注意:left-deep tree JOIN要在左边

03)Optimizer重点⭐⭐⭐⭐

为什么要优化?

一般 SQL 越复杂,Join 的表越多,数据量越大,查询优化的意义就越大,因为不同执行方式的性能差别可能有成百上千倍

Physical Plan(Plan Fragment)

功能:最小化网络数据传输;利用上数据的物理分布;增加Shuffle算子

  1. 优化器的输出是一个分布式的物理执行计划。
  2. 分布式物理执行计划的目标是在单机 Plan 的基础上最小化数据移动和最大化本地 Scan,生成 PlanFragment 树。
  3. 一个 PlanFragment 封装了在一台机器上对数据集的操作逻辑。每个 PlanFragment 可以在每个 executor 节点生成 1 个或多个执行实例,不同执行实例处理不同的数据集,通过并发来提升查询性能。
  4. Plan 分布式化的方法是增加 shuffle 算子,执行计划树会以 shuffle 算子为边界拆分为PlanFragment。

image.png

image.png

04)Executor Executor 按照物理执行计划扫描和处理数据,充分利用机器资源(CPU 流水线,乱序执行,cache,SIMD)