分类选择: 产品分类一 产品分类二 产品分类三 产品分类四 产品分类五
优化器实现02——The Volcano Optimizer Generator: Extensibility and Efficient Search
作者:佚名    所属栏目:【产品分类三】    时间:2024-07-08

前面已经介绍过System R的基于动态规划的bottom-up优化器实现,参考Access Path Selection in a Relational Database Management System。本文介绍经典的top-down类型的优化器实现——Volcano Optimizer Generator。Volcano Optimizer Generator很多设计思路脱胎于EXODUS,同时解决了很多EXODUS的不足,比如区分了逻辑表达式和物理表达式,支持了可扩展的物理properties。除了提供更强大的功能支持之外,volcano的搜索性能要高得多。

Abstract

volcano项目可以同时为数据库提供丰富的新功能扩展以及高性能 。volcano不仅仅提供了执行器模型,同时提供了一个优化器生成器(optimizer generator)。优化器生成器会将定义的数据模型、逻辑代数、物理代数和优化规则转换为优化器源代码。与更早的的 EXODUS 优化器生成器原型相比,volcano的搜索引擎的可扩展性更强,功能更强大;并且为代价模型和物理属性(physical properties)提供了有效的支持。除了提供更强大的功能支持之外,volcano的搜索性能要高得多,因为它将动态编程(当前只用于SPJ优化)与goal-directed searchbranch-and-bound裁剪结合。与其他RBO系统相比,它提供了完全的数据模型独立性和更自然的可扩展性。

虽然可扩展性是当前许多数据库研究项目和系统原型的重要目标和要求,但不能为此牺牲性能。早期使用EXODUS 优化器生成器的经验已经证明了优化器生成器范式的可行性和有效性。但构建高效的、生产质量的优化器却很困难。因此,我们设计了一个新的优化器生成器,该优化器生成器对 EXODUS 原型做了一些重要的改进。

在本文中,我们描述了 Volcano Optimizer Generator,它将很快满足上述所有要求。

优化器生成器的设计范例如下图1所示:

在构建DBMS时,model specification被转换为优化器源代码,该代码被编译并与其他 DBMS 软件(例如查询执行引擎)链接。其中一些软件是由优化器实现者编写的,例如代价函数。将数据模型描述(data model description )转换为优化器的源代码后,生成的代码将被编译并与作为 Volcano 优化软件一部分的搜索引擎链接。当 DBMS 运行并输入查询时,查询将传递给优化器,优化器会为其生成优化的执行计划。

系统中体现了五个基本设计决策,这些决策有助于使用 Volcano 优化器生成器设计和实现具有可扩展性和高搜索效率的优化器。

Volcano 优化器生成器的一个主要设计目标是最小化有关要实现的数据模型的假设,因此优化器生成器仅提供一个框架,优化器实现者可以将数据模型特定的操作和功能集成到其中。在本节中,我们讨论优化器实现者在实现新的数据库查询优化器时定义的组件。用户查询是生成的优化器的输入,物理执行计划是生成的优化器的输出,如图1所示。本节讨论的所有其他组件均由优化器实现者在优化器生成之前以等价规则和支持函数的形式指定,在优化器生成期间进行编译和链接,然后由生成的优化器在优化查询时使用。

综上,优化器实现者提供了:

这些都实现的话看起来可能是很多代码,然而,构建带有或不带有优化器生成器的数据库查询优化器都需要实现所有这些功能。考虑到查询优化器通常是数据库管理系统中最复杂的模块之一,并且优化器生成器为这些必要的优化器组件规定了干净的模块化,因此使用 Volcano 优化器生成器构建新的数据库查询优化器的工作量应该大大减少。使用 Volcano 优化器生成器的优化器实现者不需要设计和实现新的搜索算法。

由于数据库查询优化的一般范例是:先创建等价查询评估计划,然后在许多可能的计划中进行选择。因此搜索引擎及其算法是任何查询优化器的核心组件。Volcano 优化器生成器提供了一个可在所有创建的优化器中使用的搜索引擎,而不是强制每个数据库和优化器实现者实现全新的搜索引擎和算法。该搜索引擎自动与从数据模型描述生成的模式匹配和规则应用代码链接。

动态编程以前已用于数据库查询优化,特别是在 System R 优化器和 Starburst cost-based的优化器中,但仅适用于SPJ查询。Volcano 优化器生成器设计的搜索策略(search strategy)将动态编程从关系连接优化扩展到一般代数查询和请求优化,并将其与自上而下、面向目标的代数控制策略相结合,其中可能的计划数量超出了预计算的实际限制。我们的动态编程方法仅为那些被视为较大子查询(以及整个查询)一部分的部分查询导出等价表达式和计划,并非所有等价的表达式和计划都是feasible或满足interesting order。

虽然 EXODUS 优化器生成器以及 System R 和 Starburst 关系系统的搜索引擎使用前向链接(forward chaining),Volcano 搜索算法使用向后链接(backward chaining),因为它只探索那些真正参与更大表达式的子查询和计划。我们称我们的搜索算法为directed dynamic programming。动态编程被使用 Volcano 优化器生成器创建的优化器使用,通过保留大量部分优化结果并在以后的优化决策中使用这些早期结果。目前,这组部分优化结果会针对每个正在优化的查询重新初始化。换句话说,早期的部分优化结果仅仅会被当前查询使用。部分优化结果(比如某个查询结构的优化结果)的跨语句使用在未来工作规划中。

代数变换系统(Algebraic transformation systems)总是包含以多种不同方式导出相同表达式的可能性。为了通过在优化期间防止冗余优化工作,需要能够检测出相同逻辑表达式和计划。表达式和计划被捕获在表达式和等价类的哈希表中。等价类表示两个集合,一个是等价逻辑集合,另一个是等价物理表达式(计划)。逻辑代数表达式用于有效且完整地探索搜索空间,计划用于快速选择满足物理属性要求的合适输入计划。对于等价类已优化的每个物理属性组合(例如,未排序、按 A 排序、按 B 排序),将保留找到的最佳计划。

图 2 显示了 Volcano 优化器生成器使用的搜索算法的概要。

FindBestPlan过程的输入为用户要优化的查询的逻辑表达式、用户请求的物理属性(例如,SQL 的 ORDER BY 子句中的排序顺序)以及代价限制。对于用户查询来说,limit通常是无限的。但是允许用户自己配置limit限制以“捕获”不合理的查询,例如,由于缺少连接谓词而使用笛卡尔积的查询。FindBestPlan 过程分为两部分:

优化器可以随时探索三组可能的“移动”:

在生成并评估了所有可能的移动之后,将采取最有希望的移动。目前仅实现了exhaustive search,所有可能的move都会被探索。优化器可以选择是探索所有move还是通过启发式规则只探索部分move。

Cost限制用于改进使用branch-and-bound pruning的搜索算法。一旦知道逻辑表达式(用户查询或其某些部分)和物理属性向量的完整计划,则没有其他计划或具有较高成本的部分计划可以成为最佳查询评估计划的一部分。因此,即使优化器使用穷举搜索,快速找到相对好的计划也很重要。此外,cost限制被传递到子表达式的优化中,并且严格的上限也加速了它们的优化。

1)如果要进行的移动是transformation,则使用 FindBestPlan 形成新的表达式并对其进行优化。为了检测两个(或更多)规则彼此相反的情况,当前表达式和物理属性向量被标记为“in progress”。如果新形成的表达式在哈希表中并被标记为“in progress”,则它将被忽略,因为其最佳计划在完成时才考虑。

通常transformation会生成一个新的等价类,考虑图 3 中的关联性规则(associativity rule)。以 A 和 B 为根的表达式是等价的,因此属于同一类。但是,表达式 C 不等于左侧表达式中的任何表达式,需要一个新的等价类。在这种情况下,由于表达式 B的cost分析和优化的需要, 需要创建并优化一个新的等价类。

本节将详细比较 EXODUS 和 Volcano 优化器生成器。生成器的概念非常成功,因为输入数据(数据模型规范)可以转换为机器代码;然而,EXODUS 优化器生成器的搜索引擎远非最佳。Volcano 优化器生成器解决了EXODUS 优化器生成器的三个问题,并包含 EXODUS 优化器生成器中没有的新功能。

EXODUS 和 Volcano 优化器生成器的功能和可扩展性存在几个重要差异。

在本节中,我们通过实验比较 EXODUS 和 Volcano 搜索引擎中内置机制的效率和有效性。用于此比较的示例是一个相当小的“数据模型”,仅由关系选择和连接算子组成;然而,正如我们将看到的,即使是这个小数据模型和查询语言也足以证明 Volcano 优化器生成器的搜索策略优于为早期 EXODUS 原型设计的搜索策略。

测试关系包含 1,200 至 7,200 条 100 字节的记录。cost函数包括 I/O 和 CPU 成本。图 4 显示了平均优化工作量,并且为了显示优化器输出的质量,还显示了针对具有 1 到 7 个二元连接(即 2 到 8 个输入关系以及与输入关系一样多的选择)的查询生成的计划的估计执行时间。实线表示 Sun SparcStation-1 上的优化时间,速度约为 12MIPS。虚线表示估计的计划执行时间。

搜索时间反映了 Volcano 更高效的搜索策略,从两条实线之间的较大距离可见。对于 EXODUS 生成的优化器,搜索工作量在关系数量从3增加到4时急剧增加,因为此时重新分析已成为 EXODUS 中查询优化工作的重要组成部分。Volcano 的优化成本呈指数增长,几乎呈直线,这恰好反映了等价逻辑代数表达式数量的增长。对于更复杂的查询,EXODUS 和 Volcano 的优化时间相差大约一个数量级。

对于中等复杂的查询(最多 4 个输入关系),计划质量大体相同,然而,对于更复杂的查询,EXODUS 优化计划的成本要高得多,因为 EXODUS 生成的优化器及其搜索引擎不会系统地探索和利用physical properties和interesting orderings。

总而言之,Volcano 优化器生成器不仅可扩展性更强,而且比早期的 EXODUS 原型更加高效和有效。

Starburst 可扩展关系数据库管理系统的查询优化器由两个具有嵌套范围的基于规则的子系统组成。这两个子系统通过一个公共数据结构连接,该数据结构表示整个查询,称为查询图模型(QGM)。

对于中等复杂的join查询,Starburst 基于成本的优化器的穷举搜索速度非常快,因为它使用了动态编程。此外,CBO会考虑排序顺序等物理属性,并创建有效的访问计划,其中包括“粘合”算子以强制执行物理属性。

Starburst 的可扩展查询优化方法存在两个基本问题:

为了同时提供丰富的功能以及优秀的性能,Volcano 项目提供了高效、可扩展的查询和请求处理工具。不建议将关系查询处理重新引入下一代数据库系统,相反,我们致力于开发一种独立于任何数据模型的新型查询处理引擎。基本假设是:高级查询和请求语言现在并在未来将继续基于集合、其他bulk 类型、谓词和算子。因此,消费和产生item序列或集合的算子是下一代查询和请求处理系统的基本构建块。换句话说,我们假设某些集合代数(algebra of sets)是查询处理的基础,并且我们的研究试图支持任何集合代数,包括heterogeneous collections和many-sorted algebras。幸运的是,代数和代数等价规则是数据库查询优化的非常合适的基础。此外,集合和在它们之间传递数据的算子也是数据库查询处理的并行算法的基础。因此,我们对可扩展数据库系统中查询处理的基本假设与高性能并行处理兼容。

Volcano 研究提供的工具之一是一个新的优化器生成器,其设计和实现是为了进一步探索搜索引擎的可扩展性、搜索算法、有效性(即生成计划的质量)、启发式规则以及搜索引擎的时间和空间效率。

除了将基于动态规划的穷举搜索的高效实现与 EXODUS 优化器生成器的通用性和更自然的单级代数变换方法相结合,Volcano 优化器生成器具有许多新功能,这些功能增强了其作为软件开发和研究工具的价值,超越了所有早期的可扩展查询优化工作。

网站首页 关于我们 耀世动态 耀世注册 耀世登录 联系我们

电话:400-123-4567      手机:13800000000
E-mail:admin@youweb.com      联系人:张生
地址:广东省广州市天河区88号

Copyright © 2012-2018 耀世娱乐-耀世注册登录官方入口 版权所有      琼ICP备xxxxxxxx号

扫一扫  关注微信

平台注册入口