lxue
作者lxue·2017-06-05 14:16
数据库管理员·某互联网公司

厉害|DBA泪奔了!亚马逊用机器学习自动调优数据库管理系统!!

字数 4154阅读 4472评论 0赞 0

导读:最近亚马逊和卡内基梅隆大学一起开发了一套名叫“OtterTune”的机器学习自动化调整DBMS的系统,并公布起设计论文和开源项目,重点解决DBMS长期存在的一些问题:1.对管理人员专业性要求高;2.管理成本高;3.无法实现配置资源最优化等一系列问题。

注意!这无疑是让那些经验丰富待遇丰厚的DBA人员直接失业呀!

传统DBMS对管理人员要求专业性高,成本也很高!数据库管理系统(DBMS)是任何数据密集型应用程序中最重要的组件。它可以处理大量的数据和复杂的负载工作。但是却难以管理,因为它们具有数百个配置选项,用于控制诸如用于缓存的内存量以及将数据写入存储器等因素。企业经常聘请这方便的专家来协助管理,但是专家对许多企业来说成本太高。

OtterTune是由卡内基梅隆数据库组中的学生和研究人员开发的新工具,可以自动为DBMS的配置选项找到最好的设置方法。OtterTune目标是使任何人都更容易部署数据库管理系统,即使是那些在数据库管理方面没有任何专业知识的人也可以使用它。

OtterTune与其他DBMS配置工具不同,因为它利用从先前的DBMS部署调整中学到知识。大大减少了调整新的DBMS部署所需的时间和资源。为此,OtterTune维护了从以前的调优会话收集的调优数据库。它使用此数据构建机器学习(ML)模型,以捕获DBMS如何响应不同的配置。OtterTune使用这些模型来指导新应用程序的实验,推荐改进目标参数的设置(例如,减少延迟或提高吞吐量)。

在这篇文章中,我们讨论了OtterTune的ML管道中的每个组件,并展示了它们如何相互交互以调整DBMS的配置。然后,我们通过将其最佳配置的性能与数据库管理员(DBA)和其他自动调整工具所选择的配置进行比较来评估OtterTune对MySQL和Postgres的调优功能。

OtterTune如何工作?

微信图片_20170605140233.jpg

微信图片_20170605140233.jpg

上图显示了OtterTune组件和工作流程

在新的调试会话开始时,用户告诉OtterTune要优化的目标参数(例如延迟或吞吐量)。客户端控制器连接到目标DBMS并收集其Amazon EC2实例类型和当前配置。

然后,控制器开始其第一个观察期,在此期间它观察DBMS并记录目标参数。当观察期结束时,控制器从DBMS收集内部指标,如MySQL的计数器,用于从磁盘读取的页面和写入磁盘的页面。控制器将目标参数和内部度量都返回给调优管理器。

当OtterTune的调优管理器收到指标时,它将它们存储在其存储库中。OtterTune使用结果来计算控制器应该在目标DBMS上安装的下一个配置。调优管理器将此配置返回给控制器,并估计运行它的预期改进。用户可以决定是继续还是终止调整会话。

相关笔记

OtterTune为其支持的每个DBMS版本维护一个旋钮的黑名单。黑名单包括无法调整的旋钮(例如,DBMS存储文件的路径名称),或可能具有严重或隐藏后果(例如潜在地导致DBMS丢失数据)的旋钮。在每个调音会话开始时,OtterTune为用户提供了黑名单,以便他或她可以添加任何其他需要OtterTune的旋钮来避免调整。

OtterTune做出某些假设可能会限制其对一些用户的有用性。例如,它假定用户具有允许控制器修改DBMS配置的管理权限。如果用户没有,则他或她可以在其他硬件上部署数据库的第二个副本,以进行OtterTune的调试实验。这要求用户重播工作负载跟踪或从生产DBMS转发查询。

机器学习路径

下图显示了在通过OtterTune的ML管道移动数据时如何处理数据。所有观察都保存在OtterTune的存储库中。

OtterTune首先将观察结果传递到Workload Characterization组件中。该组件识别一组较小的DBMS度量,可以最好地捕获性能的差异性以及不同工作负载的区别特征。

接下来,旋钮识别组件生成最受影响DBMS性能的旋钮的排名列表。OtterTune然后将所有这些信息提供给自动调谐器。该组件将目标DBMS的工作负载映射到其数据存储库中最相似的工作负载,并重新使用此工作负载数据以生成更好的配置。

微信图片_20170605140903.jpg

微信图片_20170605140903.jpg

让我们深入了解ML管道中的每个组件。

工作负载表征:

OtterTune使用DBMS的内部运行时指标来表征工作负载的行为。这些指标提供了工作负载的准确表示,因为它们捕获了其运行时行为的许多方面。然而,许多指标是冗余的:一些是在不同单元中记录的相同测量,而其他指标代表DBMS的独立组件,其值是高度相关的。重要的是修剪冗余指标,因为这降低了使用它们的ML模型的复杂性。为此,我们根据其相关性模式对DBMS的指标进行聚类。然后,我们从每个集群中选择一个代表指标,特别是最靠近集群中心的指标。ML管道中的后续组件使用这些指标。

选项识别:

DBMS可以有数百个选项,但只有一个子集会影响DBMS的性能。OtterTune使用流行的特征选择技术Lasso来确定哪个选项会严重影响系统的整体性能。通过将该技术应用于其存储库中的数据,OtterTune识别DBMS旋钮的重要性顺序。

然后,OtterTune必须决定在进行配置建议时要使用多少个选项。使用太多的旋钮会增加OtterTune的优化时间。使用太少可能会阻止OtterTune找到最佳配置。为了自动化此过程,OtterTune使用增量方法。它会逐渐增加调音会话中使用的选项数量。这种方法允许OtterTune在扩展其范围之前,探索并优化一小部分最重要的选项的配置。

自动调谐器:

自动调谐组件通过在每个观察期之后执行两步分析来确定OtterTune应该推荐的配置。

首先,系统使用Workload Characterization组件中标识指标的性能数据来识别来自最佳表示目标DBMS工作负载的先前调优会话的工作负载。它将会话的指标与以前工作负载的指标进行比较,以确定哪些指标与不同的旋钮设置类似。

然后,OtterTune选择另一个旋钮配置来尝试。它适用于其收集的数据的统计模型,以及其存储库中最相似工作负载的数据。这个模型让OtterTune预测DBMS在每个可能的配置中执行的程度。OtterTune将持续优化配置,收集信息以改进模型,不断地尝试提高目标指标。

如何安装OtterTune?

OtterTune是用Python编写的。对于工作负载特征和选项识别组件,运行时性能不是关键问题,所以我们用scikit学习实现了相应的ML算法。这些算法在后台进程中运行,并在OtterTune存储库中使用新的数据。

对于自动调谐器,ML算法处于关键路径。他们在每个观察期之后运行,结合新数据,以便OtterTune可以选择一个旋钮配置来尝试下一步。因为性能是一个考虑因素,我们使用TensorFlow实现了这些算法。

为了收集有关DBMS硬件,配置选项和运行时性能指标的数据,我们将OtterTune的控制器与OLTP-Bench基准测试框架集成在一起。

OtterTune实验设计

为了评估,我们使用OtterTune选择的最佳配置来比较MySQL和Postgres的性能:

  • 默认值:DBMS提供的配置
  • 调整脚本:由开源调优工具生成的配置
  • DBA:由人类DBA选择的配置
  • RDS:由Amazon RD管理并部署在同一EC2实例类型上的DBMS自定义的配置

我们在Amazon EC2 Spot Instances 上进行了所有的实验。我们在两个实例上运行每个实验:一个用于OtterTune的控制器,一个用于目标DBMS部署。我们分别使用m4.large和m3.xlarge实例类型。我们在本地服务器上部署了OtterTune的调优管理器和数据存储库,内存为20个内核和128 GB RAM。

我们使用TPC-C工作负载,这是评估在线事务处理(OLTP)系统性能的行业标准。

效果评估如何?

对于我们在实验中使用的每个数据库:MySQL和Postgres,我们测量了延迟和吞吐量。以下图表显示了结果。第一个图表显示了第99 个百分位数延迟的数量,表示交易完成时间的“最坏情况”时间长度。第二个图表显示了吞吐量的结果,以每秒完成的平均交易数来衡量。

一、MySQL结果

微信图片_20170605141139.jpg

微信图片_20170605141139.jpg

将OtterTune生成的最佳配置与调整脚本和RDS生成的配置进行比较,使用OtterTune配置,MySQL实现了大约60%的延迟降低和22%至35%的吞吐量。OtterTune还会生成与DBA选择的配置几乎一样的配置。

只有一些MySQL的选项会明显影响其TPC-C工作负载的性能。OtterTune和DBA生成的配置可为每个选项提供良好的设置。RDS执行稍微差一点,因为它为一个选项提供了不是最佳的设置。调整脚本的配置执行最差,因为它仅修改一个选项。

二、Postgres结果

微信图片_20170605141209.jpg

微信图片_20170605141209.jpg

对于延迟,由OtterTune,调优工具,DBA和RDS生成的配置与Postgres的默认设置相比都获得了类似的改进。我们可以将其归因于OLTP-Bench客户端和DBMS之间的往返路由所需的消耗。对于吞吐量,Postgres通过OtterTune建议的配置比使用DBA和调优脚本选择的配置更好地执行大约12%的优化,并且比RDS好约32%。

与MySQL类似,只有几个选项会显着影响Postgres的性能。由OtterTune,DBA,调音脚本和RDS生成的配置都修改了这些选项,大多数提供了相当不错的设置。

主要结论

OtterTune自动化为DBMS的配置选项找到了良好的设置过程。为了调整新的DBMS部署,它重使用以前的调优会话数据作为培训数据,不需要生成用于训练其ML模型的初始数据集,所以调谐时间大大降低。

未来重点解决远程配置的问题。为了适应日益普及的DBaaS部署,解决远程访问DBMS的主机不可用等问题,OtterTune将很快实现自动检测目标DBMS的硬件功能,而无需远程访问。

转自微信公众号:全球人工智能

关于机器取代人工做调优DBMS这件事情,各位DBA是怎么看的呢?大家不妨在文章下发表一下自己的观点!

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广