基于学习的参数化查询优化方法

小夏 科技 更新 2024-02-20

参数化查询是一类具有相同模板且仅在谓词绑定参数上有所不同的查询,它们在现代数据库应用程序中被广泛使用。 他们执行重复的动作,这提供了优化其性能的机会。

然而,许多当前的商业数据库通过简单地优化查询中的第一个查询实例(或用户指定的实例)来处理参数化查询,缓存其最佳计划并将其重用于后续查询实例。 虽然该方法的优化时间最小化,但由于不同查询实例的最优计划不同,缓存计划的执行可能会任意次优,这在实际应用场景中并不适用

大多数传统的优化方法都需要对查询优化器进行许多假设,但这些假设通常不适合实际场景。 幸运的是,随着机器学习的兴起,这些问题可以得到有效的解决。 本期我们将重点介绍发表在VLDB2022和SIGMOD2023上的两篇文章

:《leveraging query logs and machine learning for parametric query optimization》

:《kepler: robust learning for faster parametric query optimization》

** 1 亮点

本文将参数化查询优化解耦为两个问题:

1) populatecache:缓存查询模板的 k 个计划;

2) getplan:对于每个查询实例,从缓存计划中选择最佳计划。

本**的算法架构如下图所示。 有两个主要模块:populatecache 和 getplan 模块。

PopulateCache 使用查询日志中的信息来缓存所有查询实例的 K 个计划。 GetPlan 模块首先通过与优化器交互来收集 k 个计划实例和查询实例之间的成本信息,并使用此信息来训练机器学习模型。 在 DBMS 中部署经过训练的模型。 当查询实例到达时,可以快速确定实例的最佳计划。

PolulateCache 模块负责为给定的参数化查询标识一组缓存计划,搜索阶段使用两个优化器 API:

优化器调用:返回优化器为查询实例选择的计划;

recost call:返回查询实例的优化器预估成本和对应的计划;

算法流程如下:

plan-collection phase:调用优化器调用,收集查询日志中 n 个查询实例的候选计划;

计划-重计费用阶段:对每个查询实例和每个候选计划调用重计费用调用,以形成计划-重计费用矩阵。

k-set 识别阶段:贪婪算法用于使用计划-重计费矩阵缓存 k 个计划,以最小化次乐观。

getplan 模块负责为给定的查询实例选择一个缓存的 k 个计划来执行。 GetPlan 算法可以考虑两个目标:最小化优化器估计的成本,或最小化 k 个缓存计划实际执行的成本。

考虑目标 1:使用计划-重成本矩阵训练监督式 ML 模型,同时考虑分类和回归。

考虑目标 2:使用基于多臂强盗的强化学习来训练模型。

** 2 亮点

该文提出一种端到端的、基于学习的参数化查询优化方法,旨在减少查询优化时间,提高查询执行性能。

开普勒还将问题解耦为两部分:计划生成和基于学习的计划预测。 有三个主要阶段:计划生成策略、训练查询执行阶段和鲁棒神经网络模型。

如上图所示,查询日志中的查询实例输入给 Kepler Trainer,Kepler Trainer 首先生成一个候选计划,然后收集与候选计划相关的执行信息,将其作为训练数据来训练机器学习模型,训练后将模型部署到 DBMS 中。 当查询实例到达时,使用 kepler 客户端进行最佳计划和执行。

在本文中,我们提出了一种称为行计数演变(RCE)的候选计划生成算法,该算法通过扰动优化器的基数估计来生成候选计划。

该算法的思想是,基数的错误估计是优化器次优的主要原因,候选计划生成阶段只需要包含一个实例的最优计划,而不是选择单个最优计划。

RCE算法首先为查询实例生成最优计划,然后在指数区间范围内扰动其子计划的连接基数,多次重复,多次迭代,最后将所有生成的计划选为候选计划。 具体示例如下:

使用 RCE 算法,生成的候选计划可能会优于优化器生成的候选计划。 由于优化器可能存在基数估计误差,因此 RCE 通过不断扰动基数估计来生成正确基数的最佳计划。

获得候选计划集后,将对每个查询实例的工作负载执行每个计划,并收集真实执行时间以训练监督最优计划模型。 上述过程比较繁琐,本文提出了一些加速训练数据采集的机制,如并行执行和自适应超时机制。

使用生成的真实执行数据训练神经网络,以便为每个查询实例进行最佳规划。 其中使用的神经网络是高斯神经过程的谱归一化,保证了网络的稳定性和训练的收敛性,可以为世界提供不确定性估计。 当不确定性估计值大于某个阈值时,由优化器选择执行计划。 在一定程度上避免了性能回归。

总结

以上两者都将参数化查询解耦为两部分,即 populatecache 和 getplan。 两者的比较如下表所示。

基于机器学习模型的算法在规划方面表现良好,但其训练数据收集过程成本高昂,且模型不易泛化和更新。 因此,现有的参数化查询优化方法仍有一定的改进空间。

本文图解**:

1)kapil vaidya & anshuman dutt, 《leveraging query logs and machine learning for parametric query optimization》, 2022 vldb,2)lyric doshi & vincent zhuang, 《kepler: robust learning for faster parametric query optimization》, 2023 sigmod,

相似文章

    核脊回归中核法参数优化策略的探索

    核岭回归是一种常用的非线性回归方法,它可以通过使用核函数将输入要素映射到高维空间来处理非线性关系。在核岭回归中,选择适当的核函数和调优参数对于模型性能至关重要。本文将分析核脊回归中核方法的参数优化策略,以期提供一种有效的参数选择方法,以提高模型性能。.介绍核脊的回归。核岭回归是一种在岭回归的基础上引...

    强化学习中的策略梯度优化方法

    强化学习是一种机器学习方法,它通过智能体与环境之间的交互来学习最佳决策策略。在强化学习中,策略梯度优化方法是一种常用且有效的算法,通过直接优化策略来找到最优策略。本文将介绍策略梯度优化方法的基本原理 主要算法,以及实际应用中的一些挑战和改进方向。.战略梯度优化方法的基本原理。策略梯度优化方法的核心思...

    基于深度学习习的结构化数据预测模型

    随着大数据时代的到来,结构化数据的分析变得越来越重要。传统模型在处理结构化数据时面临一些挑战,例如特征工程的复杂性和模型表达能力的局限性。作为强大的机器习技术,深度习可以通过多层神经网络的结构和大规模数据的训练来有效地解决这些问题。本文将介绍基于深度学习习的结构化数据模型的原理和应用,及其在数据科学...

    深度学习模型中的泛化能力优化方法

    随着深度学习在各个领域的广泛应用,提高模型的泛化能力已成为研究和实践的重要课题。深度学习模型的泛化能力是指模型在看不见的数据上表现良好的能力,而不仅仅是在训练数据上。本文将介绍深度学习模型中的泛化能力优化方法,以及如何通过各种手段提高模型的泛化能力,使其在实际应用中更加可靠和鲁棒。.数据增强。数据增...

    灵活性和适应性 高中生学习方法的多样化使用

    高中生是一群独特的人,他们承载着未来的希望,背负着无尽的学业压力。在这个成长的关键阶段,学习方法是自己成长道路上最宝贵的财富,如何有效掌握学习方法成为每个高中生必须思考和探索的问题。也许,我们总会被那些高分学生所吸引,他们似乎轻松驾驭知识的海洋,取得优异的成绩。然而,成功的背后往往隐藏着无数个日日夜...