搜狐技术产品

GPTuner:GPT助力的数据库智能调优系统

作者: 劳佳乐,王一博,李俞菲

单位: 四川大学智能系统实验室

有了GPT-4之后,数据库调优原来可以这么简单

—— Don’t guess if you can know

你知道吗,仅仅调整几个参数,就能使你的数据库性能提升3-6倍。

数据库管理系统有几百个可以调节的参数,合理确定这些参数值可以极大提高数据库的性能。

然而,调节这些参数的成本非常高昂,通常需要聘请专业的数据库管理员,而这样的专业人才需要十万美元一年的薪酬,而且有限的人力很难有效管理云计算环境下的海量数据库。

近些年来,为了解决手动调优的高成本、低效能问题,研究人员提出了基于机器学习的自动调优方式。可惜的是,这些方法仍然需要成百上千轮的尝试才能获得满意的效果,而每轮尝试都需要在数据库上反复执行待优化的SQL语句,这带来了昂贵的时间成本和资源消耗。

为了解决这个难题,一款具备阅读能力的数据库调优系统诞生了。这个系统名为 GPTuner,是来自四川大学、普渡大学和威斯康星大学麦迪逊分校等高校的一项研究。这项研究结合了大语言模型和贝叶斯优化的研究成果:用GPT-4 实现对多源异构知识的自动化处理与充分利用,再基于这些知识来优化搜索空间、改进搜索过程。大量实验结果表明,GPTuner平均只需要其他方法十六分之一的调优时间,就能找到比当前最优方法还好30% 的配置。

值得一提的是,这项研究是完全开源的:

Image


论文链接:https://web1.arxiv.org/abs/2311.03157

项目仓库链接:https://github.com/SolidLao/GPTuner

这篇论文提出了一个由GPT-4驱动的数据库参数自动调优系统,贡献如下:

  • 提出了一个有效利用自然语言形式的专家知识来指导数据库调优的框架。

  • 为了应对知识处理的繁琐与复杂、大语言模型的脆弱性和幻觉问题,设计了一个自动化处理流程、开发了一个聚合算法来提取可靠的结构化数据。

  • 设计了一个从多角度考虑调优场景的特征的、免训练的目标参数选取策略。

  • 充分利用结构化的领域知识来优化搜索空间,提出了一个由粗粒度到细粒度的贝叶斯优化框架来高效探索这个优化后的空间。

  • 大量实验表明,GPTuner平均只需要其他方法十六分之一的调优时间,就能找到比当前最优方法还好30% 的配置。

论文概览

研究动机

现有的数据库调优系统往往需要成百上千轮的迭代才能达到比较好的效果,每一轮迭代都要对数据库进行几分钟到几十分钟的负载测试,这要消耗大量的时间和资源。

如此高昂的调优成本来源于调优问题的复杂性:数据库参数过多且单个参数的取值范围过大。一方面,最新版本的MySQL有六百多个系统参数,哪怕是当前最佳的优化算法也难以处理这样的高维搜索空间。另一方面,针对每一个参数,现有方法只是简单地在数据库供应商规定的取值范围内进行搜索。然而,为了适应不同消费者的需求,这个取值范围非常广泛,这不仅增加了模型的学习负担,还很容易取到不合理的值而导致数据库崩溃。

事实上,数据库调优领域的大量专家知识可以解决上述难点。官方手册、数据库论坛中总结了大量调优经验:哪些参数重要以及每个参数的合理取值范围。例如,我们可以忽略与性能无关的参数、只调节重要的参数,同时只在重要的取值区间内进行尝试。然后,由于这些知识是以自然语言形式存在的,这样的智慧几乎只能为人类所利用、无法用来加速算法。因此,为了将领域知识有效地结合到优化算法中,我们设计并实现了GPTuner。

Image

GPTuner系统总览

Image

GPTuner的工作流程如下:

  1. 用户提供待优化的数据库实例、目标工作负载及优化指标(吞吐量或查询延迟)。
  2. GPTuner对多源异构知识进行处理,包括数据采集、数据清理、数据总结与事实一致性检查。
  3. 为了使知识可以为机器所用,GPTuner将整理好的半结构知识转化为结构化知识视图。
  4. GPTuner降低搜索空间维度。
  5. GPTuner在上一步骤的基础上,优化每一个维度的取值范围。
  6. GPTuner提出一个从粗粒度到细粒度的两阶段贝叶斯优化框架,该框架在优化后的搜索空间上进行一轮轮的探索。
  7. GPTuner返回搜索过程中找到的最佳配置。

方法概览

GPTuner的优越性归功于三个核心模块。首先,Knowledge Handler收集、清洗、整合了多源异构的领域知识,并完成了知识的事实一致性检查和结构化提取。其次,Knowledge-Based Search Space Optimizer利用这些知识来优化搜索空间。最后,Knowledge-Based Configuration Recommender运用了一个从粗粒度到细粒度的贝叶斯优化框架,在知识的指导下进行配置搜索与推荐。

知识处理(Knowledge Handler)

第一步:知识收集。调优知识的来源是多样的,包括但不限于官方手册和数据库论坛的讨论。此外,考虑到GPT-4的训练语料中也包含大量的数据库优化知识,我们把GPT-4作为补充性的知识来源,它能给出其他来源所未涵盖的有效建议。

Image

第二步:知识清洗。在实际应用中,我们无法保证收集到的知识一定是可靠的。为尽可能筛去错误知识,GPTuner将知识与数据库提供的系统视图进行对比,由大语言模型从语义和逻辑上判断是否矛盾,我们丢弃存在矛盾的知识。

Image

第三步:知识总结。上一步是为了保障单源数据的可靠性,接下来我们确保多源知识间的可能存在的矛盾。对于每一个参数,GPTuner根据知识来源的可信度为各来源的知识设置了优先级,在相互矛盾的知识中去除掉低优先级的知识,将非矛盾部分总结一条具体可靠的调优建议。

Image

第四步:知识检查。上一步的知识总结会面临自然语言处理领域的一个经典难题:总结的结果与总结前的内容事实不一致。GPTuner 将 GPT-4 作为一致性检查器,不断修正总结的结果直到其通过检查。

Image

第五步:知识转化。为了使上一步得到的可信知识集合为机器所利用、有效处理大模型的脆弱和幻象问题,我们提出了一个聚合算法以构建结构化视图。我们首先建立了一个案例库,GPTuner在案例库中随机抽取few-shots learning过程中所使用的案例,构建不同的prompt来得到不同的结果。最后,我们通过投票聚合不同结果以确定最终的结构化知识。

Image

搜索空间优化(Knowledge-Based Search Space Optimizer)

GPTuner从两个角度来对搜索空间进行优化: 空间维度以及每一个维度的取值范围。

维度优化 尽管数据库系统有几百个参数,但并不是所有参数都对数据库性能有重要影响,而且同时调节所有参数是不实际的。因此,我们只调节重要的参数。现有方法要么提前选取一个固定的参数集合,要么需要准备大量的数据来选择重要参数。为了解决这些局限性,GPTuner用大语言模型模拟数据库调优专家(DBA)的行为,综合考虑了系统、工作负载、查询语句和参数关联四个层面的特征。相较于现有方法,该算法无需任何训练成本就能考虑到调优场景的特性,其运行时执行的特点也避免了软硬件变化所带来的训练数据失效问题。

Image

取值范围优化 为了应对数据库厂商提供的庞大区间可能导致的问题,对于每一个参数,我们利用其对应的结构化知识来丢弃不合理的搜索区间、强调可能带来理想结果的区间、考虑区间中的特殊值。

Image

由粗到细的贝叶斯优化框架(Knowledge-Based Configuration Recommender)

为了将结构化知识集成到优化算法里,我们设计了一个由粗粒度到细粒度的两阶段贝叶斯优化框架。两个阶段的本质在于利用结构化知识构建不同粒度的搜索空间:第一个阶段是粗搜索,强调效率,希望用较低的成本获得不错的结果;第二个阶段是细搜索,强调准确和彻底,尽量获得最好的结果。另外,这两个阶段并不是相互独立的,我们设计了一个规则来利用第一个阶段的结果来提高第二阶段的搜索效率。

Image

实验

性能对比

我们通过大量的实验来验证GPTuner的有效性。GPTuner与目前最先进的方法在不同的数据库管理系统、不同的基准测试以及不同的优化指标下进行对比。结果表明,GPTuner平均只需要其他方法十六分之一的时间,就能找到比测试的最优方法还好30% 的配置。

Image

消融实验

在对GPTuner的实际能力进行评估之后,研究者们进一步探究了各模块对GPTuner性能的影响。四组消融实验分别验证了知识处理、参数选择、参数搜索范围优化、两阶段贝叶斯优化框架对GPTuner性能的影响。

Image

Image


成本分析

最后,由于API的调度是有开销的,我们对成本进行了分析。使用GPT-4作为语言模型时,GPTuner消耗了约880,000个token(30美元)来对PostgreSQL的60个knob进行处理。值得一提的是,构建好的知识是可以被反复利用的,避免了反复构建的烦人开销。

Image

更多内容请参考论文

https://web1.arxiv.org/abs/2311.03157

与代码仓库 
https://github.com/SolidLao/GPTuner