上海微创医疗器械刘道志:医疗企业产业并购的机遇与挑战
06-17
作者:邢嘉树,高级工程师,目前就职于腾讯TEG基础设施部数据库团队。腾讯数据库技术团队维护MySQL内核分支TXSQL,与原生MySQL版本%兼容。
对内支持微信红包、抽奖等集团内部业务,对外提供腾讯云CDB for MySQL的内核版本。简介:CDBTune是腾讯云自主研发的数据库智能性能调优工具。
与业界现有的常见方法相比,CDBTune不需要细分负载类型和积累大量样本。通过智能学习参与参数调优,获得更好的调参效果。
数据库系统复杂,负载多变。调优对于DBA来说是非常困难的:参数很多,不同的数据库有上百种,没有统一的标准,名称、功能、交互都千差万别。
调优依赖人的经验,人工成本较高。工具调整效率低下且不通用。
总结起来,存在三大问题:复杂、效率低、成本高。腾讯云的智能性能调优工具在不断的实践中是如何解决这些问题的呢?实践1:启发式搜索方法/Search-Based Algorithm输入包括两部分:参数约束:包括待调优的参数集合以及参数的上下界;资源限制:调整过程应该在多少轮后停止。
配置采样器:对输入参数进行采样并生成配置;配置将设置为 SUT(即要调整的环境)。系统操纵器:与SUT交互、设置参数、获取SUT性能数据。
性能优化器:根据配置和性能数据找到最佳配置。 PO算法主要包括两种方法:DDS和RBS。
l划分和发散采样(DDS) 这里,DDS用于划分参数的子空间,以降低问题的复杂度。首先将每个参数划分为k个区域,那么n个参数就有k^n种组合,从而降低复杂度。
假设如果k和n比较大,空间可能还是很大。怎么处理呢?这时可以采用超采样的方法,只提取k个样本来解决问题。
lRecursive Bound-and-Search(RBS)总能在性能平面上的某个点附近找到性能相似或更好的点,这意味着有可能找到更好的配置。在现有示例中,找到性能最佳的配置。
然后围绕此配置运行多轮,递归地寻找可能更好的配置。基于搜索的方法可能存在的问题是采样和测试可能非常耗时,并且可能陷入局部最优。
实践2:机器学习方法/Machine Learning主要包括三个步骤: l 识别负载特征,降低度量维度。 metric是指系统内部的状态指标,比如MySQL的innodb_metric。
这里使用了两种方法,一种是FA,另一种是K-means聚类。确定配置参数和性能之间的相关性。
有数百个配置参数。首先,通过Lasso线性回归参数与性能的关系对它们进行排序。
优先考虑对性能影响较大的参数。自动调优匹配目标工作负载,即根据负载在不同配置下运行,将显示的指标特征匹配到最相似的负载。
然后根据匹配的负载,推荐最优配置。这里使用的是高斯过程,并且增加了exploration/exploitation,即探索和利用的过程。
这种方法的问题在于,调优过程严重依赖历史数据,需要匹配类似的工作负载,这需要相对较高的训练数据。如果没有匹配,则说明没有找到好的配置。
实践3:深度学习方法/Deep Learning利用深度学习网络推荐最终需要调整的参数:获取工作负载对应的内部度量,学习参数调整过程中内部度量的变化规律,学习最终需要调整的参数。该模型高度依赖于训练数据。
需要获取各种配置下各种负载的性能数据。数据库负载和配置的组合非常多,基本上不可能涵盖它们。
如果无法匹配类似的场景,调优结果可能并不理想。实践4:深度强化学习方法/Reinforcement Learning在强化学习中模拟了人类与环境交互的过程。
Agent会根据观察到的状态采取相应的行动。同时,环境接受动作并改变其状态。
这个过程会按照一定的规则产生相应的奖励,这就是对动作的评价。最后,通过实际比较,我们选择了采用强化学习的模型,并开发了数据库调参工具CDBTune。
它强调调整参数的动作,摆脱以数据为中心的方法。对于强化学习和参数调优,我们定义了以下规则: 规则:按一定间隔调整参数,获得性能数据奖励:提高性能获得正奖励值,降低性能获得负奖励值。
目标:尽可能少地调整参数时间/数量,获得较高的期望奖励值状态:系统内部指标指标。我们将系统的内部度量称为内部指标;外部性能数据,如TPS/QPS/Latency等,称为外部指标。
在数据库调参场景中,具体方法是:agent选择一个调参动作(或多个参数)作用于数据库,并在执行该动作后根据外部指标计算应获得的即时奖励。强化学习对应的是参数调优的场景。
这种场景的问题在于,强化学习需要构建一个表格,显示在特定状态下执行特定操作所获得的收益。只有这样我们才知道哪种操作的效益最大。
但数据库的状态空间(性能指标)和动作空间(配置组合)都极其庞大,组装这样一张表是一项不可能完成的任务。这时候深度强化学习就派上用场了。
我们需要通过一个深度网络来近似这个Q表的效果,这就是CDBTune的实现方法。 CDBTune实现S是当前数据库性能状态(内部指标),S'是下一个状态数据库性能状态,r是立即奖励,w是神经网络参数,a是采取的动作(执行配置参数), Q是状态行为值函数这个模型主要分为两部分。
l数据库环境:在图的左边,会为这个环境设置参数,然后收集该环境的内部和外部指标并反馈到右边的模型。 l 深度强化学习网络:图中右侧,实现算法与DeepMind发布的Nature DQN类似,使用两个Q-Network。
另外,Replay Memory是我们的内存池,历史数据会被记录。然后训练将继续,添加到内存池中。
深度学习网络会从内存池中随机选择样本模型进行训练。在估计一个行动的回报时,它基于一个假设:我们的回报取决于未来每个步骤对结果的影响;而影响最大的就是最近的奖励。
该Q值是通过近似获得的。对于样本(s,a),我们可以得到真实的回报r。
这时候我们就可以获取他们之前的Loss,调整左边的网络,让两边的Loss越来越小。这样我们的网络就会逐渐收敛并得到更好的推荐。
通过测试数据形式和相关策略效果评估可以看出,CDBTune通过自学习调参过程,无需任何前期数据采集,就达到了较好的调参效果。 CDBTune调优得到的吞吐量和延迟性能都达到了一个相对可以理解的水平。
这也是深度强化学习方法相对于其他方法的优势。总结:基于DQN的智能调参优点是简化复杂度。
参数调整时无需对负载进行精确分类,参数调整动作更符合实际情况。无需获取足够的样本,减少前期数据采集的工作量。
利用勘探和开发。 (Exploration & Exploitation)特性,减少对训练数据的依赖,减少陷入局部最优的可能性。
在实践过程中,我们也遇到了一些问题:所选动作的实际操作,训练效率低,训练周期长相对于连续的配置离散化处理可能会导致推荐配置精度低,收敛速度慢。使用动作的最大 Q 值可能会导致 Q 值的高估。
针对这些问题,我们也在不断的优化和完善我们的模型,优化参数。相信CDBTune在未来能够取得更好的成绩。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-18
06-17
06-18
06-17
06-17
最新文章
【玩转GPU】ControlNet初学者生存指南
【实战】获取小程序中用户的城市信息(附源码)
包雪雪简单介绍Vue.js:开学
Go进阶:使用Gin框架简单实现服务端渲染
线程池介绍及实际案例分享
JMeter 注释 18 - JMeter 常用配置组件介绍
基于Sentry的大数据权限解决方案
【云+社区年度征文集】GPE监控介绍及使用