【机器学习化DBMS】——A Demonstration of the OtterTune
【原文信息】
B. Zhang, D. V. Aken, J. Wang, T. Dai, S. Jiang, J. Lao, S. Sheng, A. Pavlo, and G. J. Gordon, "A Demonstration of the OtterTune Automatic Database Management System Tuning Service," PVLDB, vol. 11, iss. 12, pp. 1910-1913, 2018. [PDF]
【译文】
ABSTRACT
数据库管理系统(DBMS)有大量可调旋钮,几乎控制系统中的所有内容。DBMS的性能在很大程度上依赖于这些配置旋钮,然而,要正确地调优是很困难的。许多组织都会聘请专家来配置这些旋钮,但这样做的成本太高了。随着数据库规模和复杂性的增长,对DBMS的优化已经超过了即使是最优秀的人类专家的能力。我们最近介绍了otertune,一种调优服务,它能够自动为DBMS的配置旋钮找到良好的设置。Ottertune利用以前的调优工作收集的数据来培训机器学习模型,并推荐与现有工具或人类专家生成的配置相同或更好的新配置。在本演示中,我们展示了Ottertune自动选择配置以提高DBMS性能的能力。
1. INTRODUCTION
DBMS是数据密集型应用程序的重要组成部分。但是在DBMS中获得良好的性能是不平凡的。将DBMS调优为性能良好有许多挑战。首先,现代DBMS因具有许多配置旋钮而臭名昭著[7],例如用于缓存的内存量以及数据写入存储器的频率。随着新版本和特性的发布,DBMS旋钮的数量一直在增加。另一个挑战是这些旋钮中的许多不是独立的,这意味着更改一个旋钮可能会影响另一个旋钮的最佳设置。人类很难理解一个旋钮的影响,更不用说多个旋钮之间的相互作用了。最后,通常不能在应用程序之间重用相同的配置。这是因为最佳配置在很大程度上取决于应用程序的工作负载和数据库服务器的底层硬件。一个应用程序的最佳配置可能不是另一个应用程序的最佳配置。
需要的是一个自动为特定应用程序选择最佳DBMS配置的调优工具。以前为这个问题创建工具的努力已经取得了进展[3,5],但它们的缺点限制了它们在实践中的实用性。最重要的是,它们中的许多只支持一个DBMS。这通常是因为它们依赖目标DBMS的一些内部机制来解释工作负载(例如,优化器的成本模型)。少数调优工具确实支持多个DBMS调优,但它们仍然需要手动步骤,例如让DBA(1)部署数据库的第二个副本,(2)在旋钮之间映射依赖项,或(3)指导培训过程。第二,这些工具都不能重用以前的培训数据。相反,他们必须从零开始调整每个DBMS部署,而不传输从以前的调整工作中获得的知识,这需要时间和额外的资源来收集足够的信息以做出正确的决策。
鉴于现有工具的不足,我们通过机器学习开发了otertune[1]自动DBMS调优服务。otertune与其他调优工具不同,因为它利用从调优以前的DBMS部署中获得的知识来调优新的DBMS部署。这减少了为新应用程序优化DBMS所需的时间和资源。为此,otertune维护了一个从以前的优化会话收集的优化数据的存储库。它使用这些数据构建受监督和无监督机器学习(ML)模型的组合,并使用这些模型:(1)选择运行时度量来描述工作负载;(2)选择要优化的最有效旋钮;(3)将未查看的数据库工作负载映射到以前的工作负载,从中可以传递经验;(4)建议旋钮设置i改进目标目标(例如吞吐量、延迟)的NGS。我们之前的结果[7]表明,与其他调优顾问生成的默认设置或配置相比,Ottertune为OLTP和OLAP工作负载生成的DBMS配置的延迟降低了58–94%。Ottertune还可以在60分钟内生成配置,这与专家DBA创建的配置相比,不到94%。
在本文中,我们详细介绍了Ottertune的实现过程,以及在此过程中我们学到的经验教训。在第2节中,我们首先概述了Ottertune的体系结构。然后,我们将在第3节中描述它的机器学习管道。我们在第4节中以演示说明结束。
2. ARCHITECTURE
作为显示在图1,你ottertune是两个组件:客户端控制器(1)和(2)服务器端调谐的经理。一个控制器在相同的用户deploys行政域为目标DBMS。它开始一个新的会话信息的收集和调整目标DBMS(IU,漫游系统,用户的愿望,以调整)。此信息然后再collects观测周期(五分钟后(默认)和transmits调谐他们的经理。这一过程的数据和建议经理调谐旋钮配置到一个新的控制器。然后安装这个新的CAN控制器配置,收集更多的数据来测量其冲击性能和重复这个过程,直到用户满意是目标数据库的性能。
2.1 Client-side Controller
基于OTLUNTY的Java控制器充当目标DBMS与优化管理器之间的中介。由于otertune只需要通过JDBC访问DBMS的运行时度量,因此控制器部署在外部。也就是说,它不需要“观察”应用程序的查询跟踪,也不需要用户在DBMS内部安装特殊的二进制文件。它也不需要中断应用程序来收集这些信息。
在新的调优会话开始时,控制器连接到目标DBMS并收集其当前旋钮配置。它还将在会话开始时获取DBMS内部度量的快照。虽然我们将otertune设计为尽可能不受DBMS影响,但是对于每个DBMS,检索这些信息的命令是不同的。控制器包含模块,用于从Ottertune支持的每个DBMS收集旋钮和度量1。这些DBMS通过它们的目录和其他可以通过SQL访问的内部表来公开这些信息。因此,添加对新DBMS的支持只需要基本的SQL知识。我们还发现相同DBMS的不同版本在可用数据方面有所不同。例如,PostgresV9.4包含一个关于它的wal-archiver进程的活动2的度量表,但是这个表在早期版本中不可用。因此,每个DBMS收集器模块还支持同一DBMS的不同版本。如何自动组合来自同一DBMS不同版本的度量数据仍是未来的工作。
从DBMS收集这些数据的另一个挑战是,有些系统维护特定于系统中某个子组件的旋钮和度量。有些系统,比如mysql,只报告整个DBMS的聚合统计数据,每个旋钮影响整个系统。然而,其他系统为数据库、表甚至表的子元素提供单独的旋钮和度量。例如,myrocks支持单个表3中列族的单独旋钮和度量。为了处理这些不同的数据集,控制器将它们转换成通用模式,将元素分为“全局”和“本地”组。
在观察期间,控制器不与DBMS交互。这是为了确保otertune对应用程序工作负载的执行具有最小的干扰。在观察期结束时,控制器从DBMS收集与观察期开始时相同的内部度量,并将其上载到调优管理器进行处理。它从调优管理器接收一个唯一的令牌,并使用它定期检查任务状态。一旦任务完成,并且调优管理器成功地推荐了一个配置,控制器就会下载它并使用一个单独的代理来安装新的配置并重新启动目标DBMS。代理是控制器用于在目标DBMS上执行无法通过JDBC完成的任务的独立脚本,例如需要管理权限的任务(例如,重新启动系统)。然后控制器开始下一个观察周期,并在下一个循环中上载收集的信息。这个过程一直持续到用户对初始配置的改进感到满意为止。
2.2 Server-side Tuning Manager
调优管理器负责处理和存储调优数据,调度作业以计算Ottertune的ML模型并提出配置建议,并在其前端Web界面中可视化每个调优会话的结果。调优管理器是使用DjangoWeb框架用Python编写的。我们为Ottertune的数据存储库和Django后端数据库使用相同的mysql v5.7数据库。我们使用Django的ORMAPI来设计和创建所有的表,并查询这些表以获取数据,从而将数据输入到ML模型培训组件中。我们使用芹菜来安排和执行任务,以创建Ottertune的ML模型并推荐新的配置。芹菜是一个任务队列和调度程序,很容易与Django等Web框架集成。我们使用Python的Scikit Learn和Google TensorFlow实现了所有的otertune的ML模型。
当调优管理器通过其RESTAPI从控制器接收目标DBMS的旋钮和度量数据时,它首先将这些信息存储在其数据存储库中,然后在前端可视化结果。如图2所示,用户可以查看度量图,以查看到目前为止在优化会话中建议的不同配置的目标DBMS性能的变化。接下来,调优管理器调度一个芹菜异步任务,将新的旋钮和度量数据合并到其ML模型中,然后计算目标DBMS要尝试的下一个配置。正如我们在第2.1节中所描述的,调优管理器将一个用于检查任务状态的唯一令牌返回给控制器,因为如果任务队列较长,可能需要几分钟才能完成。任务完成后,将向控制器提供一个链接,以下载下一个配置。
除了为提出配置建议而调度异步任务外,Tuning Manager还调度Celery后台任务,以便在Ottertune的ML管道中重新计算模型,以合并数据存储库中可用的任何新数据。这些只需要定期执行(即每20分钟一次),或者每当一个新的应用程序开始一个新的调优会话时。我们将在第3节中更详细地讨论Ottertune的ML管道。
当数据存储库中没有可用数据时,Ottertune无法训练其ML模型。Tuning Manager提供了两种方法,用于用初始培训数据引导Tuning Manager。如果用户以前有外部可用的调优数据,那么他们可以使用Web界面中的“批量上传”选项,一次将所有数据上传到Ottertune的数据存储库。否则,调优管理器通过为目标DBMS选择随机旋钮配置来生成初始训练数据。一旦它收集了足够的数据来训练其ML模型,它就会启动调优会话。
3. TUNING PIPELINE
从以前的调优会话中收集的旋钮和度量数据位于Ottertune的存储库中。这些数据在Ottertune的ML管道中进行处理,该管道由三个部分组成:(1)工作负载特征描述,(2)旋钮识别和(3)自动调谐。Ottertune首先将数据传递到工作负载特性化组件。此组件标识一组较小的DBMS度量,这些度量最能捕获性能的可变性和不同工作负载的区别特征。接下来,旋钮标识组件生成对DBMS性能影响最大的旋钮的排名列表。然后,Ottertune将所有这些信息提供给自动调谐器。最后一个组件将目标DBMS的工作负载映射到其数据存储库中最相似的工作负载,并重用这些工作负载数据以生成更好的配置。现在我们更详细地描述这些组件。
3.1 Workload Characterization
otertune使用DBMS的内部运行时度量来描述工作负载的行为。这些度量提供了工作负载的准确表示,因为它们捕获了工作负载运行时行为的许多方面。然而,许多度量是多余的:一些度量是以不同的单位记录的相同度量,另一些则表示DBMS的独立组件,这些组件的值高度相关。修剪冗余度量很重要,因为它降低了使用它们的ML模型的复杂性。为此,otertune首先使用因子分析(fa)将每个内部运行时度量建模为几个因子的线性组合。然后,它通过k均值对度量进行聚类,并将其因子系数用作坐标。相似的度量在同一个集群中,它从每个集群中选择一个具有代表性的度量,即最接近集群中心的度量。这组非冗余度量用于Ottertune的ML管道中的后续组件。
3.2 Knob Identification
DBMS可以有数百个旋钮,但其中只有一个子集会影响DBMS的性能。Ottertune使用一种流行的特性选择技术,称为lasso,来确定哪些旋钮对系统的整体性能影响最大。Ottertune将此技术应用于其存储库中的数据,以确定DBMS旋钮的重要性顺序。
在提出配置建议时,Ottertune还必须决定使用多少旋钮。使用过多会显著地增加ottertune的优化时间,但是,使用过少会妨碍ottertune找到最佳配置。为了使这个过程自动化,otertune使用了一种递增的方法,在这种方法中,它逐渐增加了调优会话中使用的旋钮的数量。这种方法允许Ottertune探索和优化一小组最重要旋钮的配置,然后扩展其范围考虑其他旋钮。
3.3 Automated Tuning
自动调谐器测定在每一个观测周期之后,应通过两步分析推荐一个单元结构。首先,该系统利用工作负荷特征分量中的测量性能数据来确定工作负荷,从最好代表DBMS工作负荷的预先调谐会议中确定工作负荷。它比较了在调谐会话中收集到的遥远的度量衡与从原始工作负荷中计算出欧几里得的距离,并发现了与目标工作负荷最相似的原始工作负荷,namely,the one with smallest euclidean distance.
然后,Ottertune选择另一个旋钮配置进行尝试。它将高斯过程回归模型与收集的数据以及存储库中最相似工作负载的数据相匹配。这个模型可以让otertune预测DBMS在每种可能的配置下的性能。Ottertune优化了下一个配置,权衡勘探(收集信息以改进模型)与开发(贪婪地在目标指标上做得很好)。
4. DEMONSTRATION
我们对Ottertune的演示旨在展示其选择超过人类生成的DBMS配置的能力。我们将要求参与者调整Postgres(V9.6),以实现OLTP和OLAP工作负载(分别是TPCC和TPC-H)的最佳性能。对于每个配置,我们将在DBMS上部署它,并使用OLTP基准测试套件运行目标工作负载[4]。我们还将在不同的机器上运行otertune,让它从这些新的试验中学习。系统将用户配置与Ottertune的最佳配置进行排序。
显示在图。3,是你的四步骤示范。使用Web界面,用户第一选择,使他们想调整工作量。然后提供一个用户界面配置中最重要的十knobs Postgres v9.6(AS)中描述的算法在ottertune 3.2节),他们可以调整。每个旋钮,表(1)包括一个旋钮的短描述什么是默认值,(2)和(3)a list of values preselected五不同的可能。用户可以选择一个不同的设置,每个设置旋钮或离开它在默认值。完成后,用户的选择,然后提交的配置和安排,它是执行在测试集群。他们想显示他们的知识,然后选择从不同ottertune的最佳配置.
我们将使用OLTP工作台运行基准测试5分钟,并报告平均吞吐量。然后,OLTP工作台会将此结果上传至排行榜,以显示哪个用户拥有最佳配置,以及如何将其与Ottertune的最佳配置进行比较。排行榜还将包括来自人类DBA专家和基于启发式的调优工具(pgtune[2])的额外结果。
为了确保完全评估每个配置,我们将在OLTP工作台上运行工作负载几分钟。因此,用户提交的结果不会立即知道。我们会在他们的结果准备好后通过电子邮件通知他们。这将把他们带到一个页面,该页面由Ottertune生成,其中包含Ottertune的控制器从DBMS收集的性能指标的细分。
Demo Takeways: 这个演示的目标是三重的。首先,我们试图通过演示DBMS调优的挑战来吸引观众。这激发了对像Ottertune这样的自动调整工具的需求。其次,我们将展示Ottertune将重复观察期的新信息纳入其ML模型的能力,并改进其建议的有效性。最后,我们希望这个游戏能让用户了解如何针对不同的工作负载调整DBMS。
5. CONCLUSION
介绍了一种用于DBMS配置自动调整的otertune服务的设计与实现。与以前的调优工具不同,otertune重用从以前的调优会话收集的培训数据。我们的方法结合了有监督和无监督机器学习方法,以(1)选择最有效的旋钮,(2)将以前看不到的数据库工作负载映射到已知的工作负载,以及(3)推荐旋钮设置。本文介绍了Ottertune的体系结构和演示方案。