SQL Optimizer解析 | 青训营笔记

77 阅读4分钟

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

今日内容:#SQL Optimizer解析

一、课前预习

本次课中的很多概念之前未接触过,很陌生,所以要做些准备工作。

1.词法分析

“基于大数据和用户行为的分词、词性标注、命名实体识别,定位基本语言元素,消除歧义,支撑自然语言的准确理解”-百度智能云

image.png

2.语法分析

语法分析,编译过程的一个逻辑阶段。语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”,“语句”,“表达式”等等. 重点是 分析一个句子(单句)的句子成分

3.计算和存储分离

存储”是需要持久化的,可以是U盘,硬盘,网盘等等;“计算”其实就是我们的计算过程所需要的CPU和内存等。

4.抽象语法树

AST 全称为 Abstract Syntax Tree,译为抽象语法树。

假设你的电脑主板坏掉了。维修人员的修理过程是:先把电脑各个零件拆开,找到坏掉的主板,检查主板是否还可以修好。如果不行,则换一个新的主板,再把电脑一步步重新组装好。 AST 就是被拆解的一个个电脑零件。

5.逻辑计划、物理计划

image.png

6.RBO和CBO

image.png

7.数据湖、数据仓库、湖仓一体化

湖仓一体,其含义是指将数据湖的语义灵活性与数据仓库的生产优化和交付相结合。

企业开始大规模使用 Hadoop 分布式的大数据计算和存储方式。在这个体系架构下,Spark Streaming、Flink 让大数据平台具备了实时处理数据能力;HDFS处理海量数据的高可用廉价存储;用MapReduce实现并行计算;Hive则作为Hadoop的数据仓库工具。

image.png

“湖仓一体”是构建在数据湖低成本的数据存储架构之上,同时继承了数据仓库的数据处理和分析功能。湖仓一体的英文名叫“Lakehouse”,有人把“湖仓一体”做了形象的比喻,就好像湖边搭建了很多小房子,有的可以负责数据分析,有的来运转机器学习,有的来检索音视频等,而这些数据源流,都可以从数据湖里轻松取得。

image.png

二、课中笔记

1.    大数据体系和SQL

1.1“One SQL rules big data all”

Sql: 流行、通用、标准接口

1.2.SQL处理流程

image.png 1)Parser: AST(词法分析拆分字符串,语法分析组成AST)

2)Analyzer(检查绑定元信息、sql合法性、ast-logical plan)-Logical Plan(逻辑地描述sql的 分步骤计算, 操作为算子)

3)查询优化(数据库怎么去执行sql,有自由度,所以有优化空间)

4)Pysical plan(利用数据亲和性,最小化数据运输,边接收边运输,把逻辑计划拆分为多个物理计划片段)/Exceutor(单、多机并行)

2.    常见查询优化器

2.1分类

下-上(sqlserver)、上-下 / 基于规则RBO(根据经验)、基于代价CBO(模型估计)

2.2RBO原理

基于关系代数原理(运算符、等价变换)

优化规则:(I/O,网络、内存和cpu)

规则1 列裁剪(从目标,上到下,不需要的列被裁减)

规则2 谓词下推(尽早过滤谓词条件不符合的)

规则3 传递闭包(闭包规则推导)

规则4 runtime filter(join时构建哈希表,把表的关键信息传给scan进行过滤。Min-max,in-list,bloom filter)

RBO实现简单速度快,不保证最优

2.3CBO原理

使用模型估算执行代价(所有算子代价和),选最小

算子(叶子/中间)代价:cpu,内存,i/0,从下往上

统计信息(原始表/推导)

1)行、列、大、小/选择率(返回多大比例)和基数(行数)

2)收集方式:DDL/手动执行/动态采样

3)推导规则:and/*  or/+-*  not/-  

4)问题:列的关联会错误

5)执行计划枚举(动态规划、贪心)

3.    社区开源实践-apache calcite

流行volcano/cascade框架

Apache Clcite

RBO Rule

表达式子树、新表达式、优化规则100+、匹配规则4、遍历所有rule

CBO 基于volcano/cascade

Memo数据结构,grup,从下往上。Memo记录每个Group,Group之间是and/or。

动态规划,剪枝-更新上限

4.    前沿趋势-ai和db结合

优化器具有一定前景

事务、分析结合

AI4DB DB4AI

image.png

image.png