0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Cascades查询优化器基本原理分析

OSC开源社区 来源:OSC开源社区 2023-12-15 09:38 次阅读

数据库中查询优化器是数据库的核心组件,其决定着 SQL 查询的性能。Cascades 优化器是 Goetz 在 volcano optimizer generator 的基础上优化之后诞生的一个搜索框架。 本期技术贴将带大家了解 Cascades 查询优化器。首先介绍 SQL 查询优化器,接着分析查询优化基本原理,最后对 Cascades 查询优化器进行重点介绍。

一、SQL 查询优化器

用户与数据库交互时只需要输入声明式 SQL 语句,数据库优化器则负责将用户输入的 SQL 语句进行各种规则优化,生成最优的执行计划,并交由执行器执行。优化器对于 SQL 查询具有十分重要的意义。 如图 1 所示,SQL 语句经过语法和词法解析生成抽象语法树(AST),经过基于规则的查询优化(Rule-Based Optimizer)基于代价的查询优化(Cost-Based Optimizer)生成可执行计划。

09647b4e-9a70-11ee-8b88-92fbcf53809c.png

图 1

基于规则的优化算法:基于规则的优化方法的要点在于结构匹配和替换。应用规则的算法一般需要先在关系代数结构上匹配一部分局部的结构,再根据结构的特点进行变换乃至替换操作。

基于成本的优化算法:现阶段主流的方法都是基于成本(Cost)估算的方法。给定某一关系代数代表的执行方案,对这一方案的执行成本进行估算,最终选择估算成本最低的方案。尽管被称为基于成本的方法,这类算法仍然往往要结合规则进行方案的探索。基于成本的方法其实是通过不断的应用规则进行变换得到新的执行方案,然后对比方案的成本优劣进行最终选择。

二、查询优化的基本原理

优化器一般由三个组件组成:统计信息收集开销模型计划列举。 如图 2 所示,开销模型使用收集到的统计信息以及构造的不同开销公式,估计某个特定查询计划的成本,帮助优化器从众多备选方案中找到开销最低的计划。

097b36d6-9a70-11ee-8b88-92fbcf53809c.png

图 2 SQL 语句查询优化基于关系代数这一模型:

SQL 查询可以转化为关系代数;

关系代数可以进行局部的等价变换,变换前后返回的结果不变但是执行成本不同;

通过寻找执行成本最低的关系代数表示,我们就可以将一个 SQL 查询优化成更为高效的方案。

寻找执行成本最低的关系代数表示,可以分为基于动态规划的自底向上基于 Cascades/Volcano 的自顶向下两个流派。

自底向上搜索:从叶子节点开始计算最低成本,并利用已经计算好的子树成本计算出母树的成本,就可以得到最优方案;

自顶向下搜索:先从关系算子树的顶层开始,以深度优先的方式来向下遍历,遍历过程中进行剪枝。

自底向上的优化器从零开始构建最优计划,这类方法通常采用动态规划策略进行优化,采用这类方法的优化器包括IBMSystem R。自顶向下的优化策略的优化器包括基于 Volcano 和 Cascades 框架的优化器。

三、Cascades 查询优化器

Cascades 查询优化器采用自顶向下的搜索策略,并在搜索过程中利用 Memo 结构保存搜索的状态。

Cascades 关键组件构成:

Expression:Expression 表示一个逻辑算子或物理算子。如 Scan、Join 算子;

Group:表示等价 Expression 的集合,即同一个 Group 中的 Expression 在逻辑上等价。Expression 的每个子节点都是以一个 Group 表示的。一个逻辑算子可能对应多个物理算子,例如一个逻辑算子 Join(a,b),它对应的物理算子包括{HJ(a, b), HJ(b, a), MJ(a, b), MJ(b, a), NLJ(a, b), NLJ(b, a)}。我们将这些逻辑上等价的物理算子称为一个 Group(组)。注:HJ 表示 HashJoin 算子,MJ 表示 MergeJoin 算子,NLJ 表示 NestLoopJoin 算子;

Memo:由于 Cascades 框架采用自顶向下的方式进行枚举,因此,枚举过程中可能产生大量的重复计划。为了防止出现重复枚举,Cascades 框架采用 Memo 数据结构。Memo 采用一个类似树状(实际是一个图状)的数据结构,它的每个节点对应一个组,每个组的成员通过链表组织起来;

Transformation Rule:是作用于 Expression 和 Group 上的等价变化规则,用来扩大优化器搜索空间。

Cascades 首先将整个 Operator Tree 按节点拷贝到一个 Memo 的数据结构中,Memo 由一系列的 Group 构成,每个算子放在一个 Group,对于有子节点的算子来说,将原本对算子的直接引用,变成对 Group 的引用。

098aa72e-9a70-11ee-8b88-92fbcf53809c.png

图 3 如图 3 所示,生成该语法树的 Memo 初始结构。Memo 结构中一个圆角框代表一个算子,圆角框右下角是对其 Children’s Groups 的引用,左下角是唯一标识符。生成初始的 Memo 结构后,可以采用 transform rule 进行逻辑等价转换,规则如下:

对于一个逻辑算子,其所有基于关系代数的等价表达式保存在同一个 Group 内,例如 join(A,B) -> join(B,A);

在一个 Group 内,对于一个逻辑算子,会生成一个或多个物理算子,例如 join -> hash join,merge join,NestLoop join;

一个 Group 内,一个算子,其输入(也可以理解为subplan)可以来自多个 Group 的表达式。

在图 4 中,描述了一个部分扩展的 Memo结构,与图 1 中的初始 Memo 相比,在同一个 Group 内,增加了等价的逻辑算子,以及对应的物理算子。

098e86c8-9a70-11ee-8b88-92fbcf53809c.png

图 4 在探索的过程中,优化器就会通过开销模型 Coster 借助统计信息来计算子步骤的开销,遍历完每个 Memo Group之后,归总得到每个完整计划的总开销,最终选择 Memo 中开销最低的计划。

099fd8c4-9a70-11ee-8b88-92fbcf53809c.png

图5 图 5 中有三个 Group,分别对应三个逻辑算子:Join(a, b), GET(a) 和 GET(b)。Group 1(Group 2)中包含了所有对应 GET(a) (GET(b))的物理算子,我们可以估算每个物理算子的代价,选取其中最优的算子保留下来。 为了防止枚举过程出现重复枚举某个表达式,Memo 结构体中还包含一个哈希表(exprHT),它以表达式为哈希表的键,用来快速查找某个表达式是否已经存在于 Memo 结构体中。

Cascades 采用自顶向下的方式来进行优化,以计划树的根节点为输入,递归地优化每个节点或表达式组。如图所示,整个优化过程从 Group 0 开始,实际上要先递归地完成两个子节点(Group 1 和 Group 2)的优化。 因此,实际的优化完成次序是 Group 1 -> Group2 -> Group 0。在优化每个 Group 时,依次优化每个组员;在优化每个组员时,依次递归地优化每个子节点。依次估算当前组里每个表达式 e 的代价 cost(e),选择最低得代价结果保存在 bestHT 中。优化结束时,查询 Join(a,b)对应的 Memo 结构体,获取最低的执行计划。

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SQL
    SQL
    +关注

    关注

    1

    文章

    742

    浏览量

    43604
  • 数据库
    +关注

    关注

    7

    文章

    3643

    浏览量

    63748
  • 数据结构
    +关注

    关注

    3

    文章

    564

    浏览量

    39971

原文标题:深度解读Cascades查询优化器

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    LLC电路基本原理分析及公式推导(ST)

    LLC电路基本原理分析及公式推导(ST)
    发表于 02-02 08:50

    串联谐振逆变器的基本原理

    串联谐振通常伴有逆变器。该组合称为串联谐振逆变器。什么是基本原理?让我简要介绍串联谐振逆变器的一些基本原理。]首先给你看一张图片:
    发表于 11-07 10:21

    网络分析基本原理,怎么使用网络分析仪?

    网络分析基本原理网络分析仪的测量方法网络分析仪的结构怎么使用网络分析仪?
    发表于 04-12 06:57

    功率分析仪的测量基本原理是什么?

    最常用的有功功率测量方法是什么?功率分析仪的测量基本原理是什么?有功功率的测量方法在变频的应用是什么?
    发表于 05-08 08:36

    电机转动的基本原理是什么?

    电机转动的基本原理是什么?电机运动的基本原则有哪些?
    发表于 07-21 07:59

    线性电源的基本原理是什么

    讲解模块原理图-PDF、原理图库、PCB库下载基本原理线性电源的基本原理是市电经过一个工频变压降压成低压交流电之后,通过整流和滤波形成直流电,最后通过稳压电路输出稳定的低压直流电。线性电源的优点是...
    发表于 07-30 07:47

    无线充电的基本原理是什么

    一 、无线充电基本原理无线充电的基本原理就是我们平时常用的开关电源原理,区别在于没有磁介质耦合,那么我们需要利用磁共振的方式提高耦合效率,具体方法是在发送端和接收端线圈串并联电容,是发送线圈处理谐振
    发表于 09-15 06:01

    模数转换(ADC)的基本原理是什么?

    模数转换(ADC)的基本原理是什么?常用的几种ADC类型的基本原理及特点是什么?
    发表于 09-28 08:21

    PWM控制的基本原理是什么

    PWM控制的基本原理是什么?如何让逆变器输出为等幅矩形波呢?如何实现低通滤波呢?
    发表于 10-22 07:06

    通用计时基本原理是什么?

    通用计时基本原理是什么?
    发表于 01-21 06:30

    串口通信基本原理是什么?

    串口通信基本原理是什么?UART异步通信方式特点是什么?常用的串口相关寄存有哪些?
    发表于 02-18 08:00

    光导纤维导光的基本原理

    光导纤维导光的基本原理     光是一种电磁波,一般采用波动理论来分析导光的基本原理。然而根据光学理论指出:在尺寸
    发表于 01-26 18:16 1.3w次阅读
    光导纤维导光的<b class='flag-5'>基本原理</b>

    基于关系代数树的查询优化方法实例分析

    提出了基于关系代数树结构的SQL查询优化策略。利用改进查询计划的代数定律,分析基于关系代数树的关系代数式查询
    发表于 05-07 10:11 21次下载
    基于关系代数树的<b class='flag-5'>查询</b><b class='flag-5'>优化</b>方法实例<b class='flag-5'>分析</b>

    步进马达基本原理

    步进马达基本原理步进马达基本原理步进马达基本原理
    发表于 11-30 11:55 8次下载

    了解矢量网络分析基本原理

    了解矢量网络分析基本原理
    发表于 11-02 15:11 1次下载