基础知识——SQL查询优化器浅析 | 青训营笔记

253 阅读6分钟

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

大数据体系和SQL


生产系统中的大数据体系

  • 基础技术 ——> (数据应用 数据组织集成 数据传输 数据采集) ——> 数据治理
    • 如华为云MRS(MapReduce Server)提供租户完全可控的企业级大数据集群云服务,轻松运行Hadoop、Spark、HBase、Kafka、Storm等大数据组件。 image.png
  • 流式计算:即数据流进行处理,是实时计算。
  • 批式计算:即统一收集数据,存储到数据库中,然后对数据进行批量处理的数据计算方式。
  • 交互式分析引擎:即针对大数据具备交互式分析能力的分布式计算引擎,它通常用于OLAP(Online Analytical Processing,联机分析处理)场景。

SQL的基本用法和关系代数基础知识(选择、 投影、连接、集合操作等)

               //SQL学习将在另外一篇文章展现,写好后引用过来

编译原理相关的基础知识

  • 词法分析(Lexical Analysis)
    • 词法分析是编译器中最底层的分析。
    • 构造词法分析器的前提:定义语言中的单词结构。
    • 不同语言的词法分析器的构造原理类似,但单词类别和结构不完全相同
    • 构造方法:人工方法、自动化方法。
  • 语法分析(Syntactic Analysis)
    • 语法分析是编译程序的核心部分。
    • 任务:检查词法分析器输出的单词序列是否为源语言中的句子,即是否符合源语言的语法规则。
    • 语法分类:自顶向下、自底向上。
  • 抽象语法树(Abstract Syntax Tree,AST)
    • 是源代码的抽象语法结构的树状表示树上的每个节点都表示源代码中的一种结构(并不会表示出真实语法出现的每一个细节)
    • 树上的每个节点都表示源代码中的一种结构
    • 抽象语法树在很多领域有广泛的应用,比如浏览器,智能编辑器,编译器。

SQL执行计划

——> SQL在数据库中执行时的表现情况,通常用于SQL性能分析,优化等场景。 ——> eg:在MySQL使用 explain 关键字来查看SQL的执行计划。

  • 逻辑计划(Logical Plan)

image.png

  • 物理计划(Physical Plan)
    • org.apache.spark.sql.catalyst.plans.QueryPlan中,从定义可以看出,物理计划是一个抽象语法树,树节点的主要组成部分包括:子树节点、出现过的表达式、出现过的子查询
  • 分布式执行计划:Plan Fragment
    • EXLPAIN
      • SQL执行计划是一个节点数,显示执一条SQL语句执行时的详细步骤。每一个步骤是一个数据库运算符,也叫作一个执行算子。使用explain命令可以查看优化器为每个查询生成的具体执行计划。
  • 左偏树:Left-deep tree
    • 合并这两个优先队列,而且还要保证合并后符合优先队列的性质,时间复杂度要限制在image.png

SQL执行的基本流程

  • MySQL执行流程:SQL语句 -> 查询缓存 -> SQL分析器 -> SQL优化器 -> SQL执行器
  • 任务调度:DAG
    • DAG (Directed acyclic graph),中文名叫有向无环图,是由顶点和有向边构成的一种图状结构
    • 由于DAG具有序列化的特性,可被用于表示事件之间的依赖关系和管理任务之间的调度,是计算机领域中常用的数据结构,常被用于拓扑排序和求解关键路径,这是DAG得以在分布式账本领域得到应用的理论基础。

分布式系统中 shuffle 的实现方式

  • 即对数据进行重组,由于分布式计算的特性和要求,在实现细节上更加繁琐和复杂。
  • Broadcast shuffle vs. Repartition shuffle
  • Spark与shuffle:
    • Map 阶段与 Reduce 阶段,通过生产与消费 Shuffle 中间文件的方式,来完成集群范围内的数据交换。换句话说,Map 阶段生产 Shuffle 中间文件,Reduce 阶段消费 Shuffle 中间文件,二者以中间文件为媒介,完成数据交换。

image.png

SQL中group-by和join的执行方式

  • GROUP-BY:www.runoob.com/sql/sql-gro…
  • JOIN:www.runoob.com/sql/sql-joi…
  • Hash-based vs. Sort-based
    • SortShuffleManager的运行机制主要分成两种,一种是普通运行机制,另一种是bypass运行机制。当shuffle read task的数量小于等于spark.shuffle.sort.bypassMergeThreshold参数的值时(默认为200),就会启用bypass机制。
    • HashShuffleManager:shuffle write阶段,默认Mapper阶段会为Reducer阶段的每一个Task单独创建一个磁盘文件来保存该Task中要使用的数据。
      • 优点:就是操作数据简单。
      • 缺点:但是在一些情况下(例如数据量非常大的情况)会造成大量文件(M*R,其中M代表Mapper中的所有的并行任务数量,R代表Reducer中所有的并行任务数据)大数据的随机磁盘I/O操作且会形成大量的Memory(极易造成OOM)。

常见的查询优化器


  • Top-down Optimizer
  • Bottom-up Optimizer
  • Rule-based Optimizer
    • 动态规划
  • 交换律、结合律、传递性
  • RBO优化规则
    • 基于规则的优化器(RBO--Rule-Based Optimization)是通过编码在 Oracle 数据库中的一系列固定的规则,来决定目标 SQL 的执行计划。Oracle 事先给各种类型的执行路径定一个等级,从 1 到 15,等级 1 对应执行路径的执行效率最高,等级 15 对应执行路径的执行效率最低。对于等级相同的执行计划,oracle 根据目标对象在数据字典中缓存的顺序判断选择哪一种执行计划。在决定目标 SQL 的执行计划时,RBO 会从该 SQL 的诸多执行路径中选择一条等级最低的执行路径来作为其执行计划。
    • RBO 中等级 1 对应的执行路径是“single row by rowid(通过 rowID 来访问单行数据)”,等级 15 所对应的执行路径时“full table scan(全表扫描)”
    • 列裁剪
    • 谓词下推
    • 传递闭包
    • Runtime Filter(min-max filter,in-list filter,bloom filter)
    • Join 消除
    • 谓词合并
  • CBO相关概念
    • CBO(Cost-Based Optimization 基于代价的优化规则)
    • 统计信息
      • Number of Distinct Value,NDV
      • Selectivity
      • Cardinality
    • 代价模型

查询优化器的社区开源实践


  • Apache Calcite
  • Orca
  • Volcano/Cascade 框架
    • Memo
    • AND/OR Graph
    • Expression group
    • Group expression
    • Pattern
    • Rule
    • Branch-and-Bound Pruning
    • Winner

SQL相关的前沿趋势


  • 存储计算分离
  • HSAP, HTAP, HTSAP
  • Cloud Native, Serverless
  • 数据仓库,数据湖,湖仓一体,联邦查询
  • 智能化:AI4DB,DB4AI

参考文献: