Part 3 Plan Stitch 框架概述

给定一个查询实例 q,当前数据库配置 C 中可用的索引集{Ik}和 q 的一组不同的执行计划{pi},这些计划的每个算子的执行成本在过去的执行中都有记录,Plan Stitch 为查询 q 构造一个执行成本最便宜的计划 p,要求 p 中的每个算子都可以在某个计划 pi∈P 中找到。图中显示了 Plan Stitch 如何与 DBMS 集成的逻辑架构,它如何获得其输入(q,P,C),以及它如何通过其输出(p)影响优化器的计划选择。Plan Stitch 在查询优化和执行的关键路径之外执行,可以作为外部客户端组件或 DBMS 中的后台线程。优化器为给定查询和当前配置 (从数据库元数据获得) 选择一个计划,然后执行该计划,并将其执行统计信息记录在存储库中。执行统计信息包括计划结构及其算子级别的执行成本。随着时间的推移,存储库会为同一查询收集它的不同的执行计划。我们就可以触发计划缝合来寻找与优化器当前选择的计划相比可以降低执行成本的替代缝合计划。最终通过强制缝合计划的 API,也就是计划提示的机制,实现限制优化器使用缝合计划作为新的执行计划。Plan Stitch 有两个主要部分:- 使用先前执行的同一查询的不同计划 P 的集合来识别和编码一个受限的搜索空间;
- 使用计划 pi 每个算子的执行成本在搜索空间中构建总执行成本最小的缝合计划。
Plan Stitch 首先将构造缝合计划的搜索空间限制在某些 pi 中出现的运算符上,生成这种受限搜索空间的主要挑战是:- 将这些等效的子计划紧凑地编码在一个结构中,以允许有效的搜索。
查询计划中的每个节点以及位于该节点上的子计划具有所需物理属性的逻辑表达式,例如,没有排序顺序的 A join B join C join D。如果两个子计划具有相同的逻辑表达式和所需的物理属性,则它们是等价的。为解决搜索空间编码问题,论文使用了 AND-OR 图构造搜索空间。在 AND-OR 图中,每个 AND 节点对应于一个计划中的一个物理运算符。每个 OR 节点表示一个具有所需物理属性的逻辑表达式。AND 节点的子节点是 OR 节点,代表 AND 节点的子计划的逻辑表达和必要的物理属性。OR 节点的子节点是 AND 节点,代表 OR 节点的备选子计划的根物理运算符。- 该图是非循环的,使 Plan Stitch 能够自下而上地递归构建最便宜的计划;
- 至少有一个或节点: 查询的所有计划共享的根或节点。
基于上述属性,论文使用动态规划为 AND-OR 图中的每个 AND 节点和每个 OR 节点拼接最便宜的子计划,来构造从叶和节点到根或节点的最便宜的计划。具体算法流程如下图所示:

自底向上遍历每一个 OR 节点,对于它的子算子 op(AND节点):- 如果 op 是叶节点:则 bestsubplan 是 op 本身,bestSubUnitCost 是执行一次 op 的成本;
- 如果 op 是非叶节点:遍历每个子节点(OR节点)的 bestSubInGp 缝合进 op,然后计算 op 的 stitchedSubUnitCost;
- 最后在构造出以 op 为根的最便宜的缝合子计划后,更新相应的 bestSubInGp(g(or));
- 在进行动态规划时用到了一个计算公式 stitchedSubUnitCost 用于估算缝合计划的成本。该公式输入有 4 个,其中 opCost 是观察到的算子的执行成本,execCount 是在其原始计划中被执行的次数,childSubUnitCost 是执行每个缝合的子计划的估计执行成本,childExecCount 是原始子计划的执行次数。
其次,论文中为估算缝合计划的成本还提出了 2 个假设:- 假设同一个逻辑运算的运算符,只要它的输入和输出不变,其执行成本可以从一个计划转移到另一个计划。
- 对于多次执行的子计划,可以将执行成本平均分配给每次执行,从而第一个执行的启动开销。
基于上述公式和假设,论文通过自底向上的动态规划算法实现了缝合计划的搜索。论文通过 TPC_DS 测试基准(10 GB),分别在三例实际客户工作负载中进行了实验。实验比较了基于回归的计划校正 (RBPC)和计划缝合 Plan Stitch 的性能,表1显示了工作负载的一些汇总统计信息:

论文从计划质量、开销估算、覆盖范围、Overhead、缝合计划分析、参数化查询、数据变化共7个方面分析 Plan Stitch 的性能,这里节选部分实验结果进行展示,感兴趣的读者可以阅读原文。

图4、5、6 和 7 显示了在 TPC-DS 基准和真实世界的客户工作负载中,缝合计划的执行成本比 RBPC 的改善的百分比。其中 x 轴的标签是下边界,y 轴是 Plan Stitch 被调用的百分比。例如,图 4 显示,16% 的缝合计划的执行成本比 RBPC 选择的计划便宜 0%-10%。与 RBPC 选择的计划相比,Plan Stitch 在所有工作负载中至少有 40% 的缝合计划的执行成本进一步降低了 10%。

图 9、10、11 和 12 显示了 TPC-DS 基准和真实世界客户工作负载中,缝合计划的开销估算误差分布。论文计算了缝合计划的执行成本与估计成本的比例,排除了执行成本和估算成本差异都很小的计划。在所有的工作负载中,至少 70% 的缝合计划的开销估计值的误差在 20% 以内,证明了估算缝合子计划开销中描述的成本计算假设在实践中基本成立。