腾讯云CDB的AI技术实践:CDBTune

作者:邢家树,高级工程师,目前就职于腾讯TEG基础架构部数据库团队。腾讯数据库技术团队维护MySQL内核分支TXSQL,100%兼容原生MySQL版本,对内支持微信红包,彩票等集团内部业务,对外为腾讯云CDB for MySQL提供内核版本。

导语:CDBTune是腾讯云自主研发的数据库智能性能调优工具。相比于现有业界通用方法,CDBTune无需细分负载类型和积累大量样本,通过智能学习参与参数调优,获得较好的参数调优效果。

数据库系统复杂,且负载多变,调优对DBA非常困难:

参数多,达到几百个

不同数据库没有统一标准,名字、作用和相互影响等差别较大

依靠人的经验调优,人力成本高,效率低下

工具调优,不具有普适性

总结起来就是三大问题复杂效率低成本高。腾讯云的智能性能调优工具如何在不断实践中破解这些问题呢?

实践一:启发式搜索方法/Search-Based Algorithm

img

输入包括两部分:

参数约束:包括要调优的参数集合和参数的上下界;

资源的限制:调优过程在多少轮以后停止。

Configuration Sampler:会对输入参数进行取样,生成配置;配置会被设置到SUT(也就是待调优环境)。System Manipulator:它和SUT进行交互,设置参数,并且会获得SUT的性能数据。

Performance Optimizer:根据配置和性能数据找到最优的配置。PO算法主要包括两个方法:DDS和RBS。

lDivide-and-Diverge Sampling (DDS)

这里通过DDS来划分参数的子空间,降低问题的复杂度。首先把每个参数划分成k个区域,那么n个参数就有k^n个组合,从而降低复杂度。假设k和n如果比较大的话,空间可能还是很大。如何处理?此时可用超抽样的方法,只抽出k个样本解决。

lRecursive Bound-and-Search (RBS)

在一个性能平面上的某个点附近,总是能找到性能相近或者更好性能的点,也就是说可能找到更好的配置。在已有的样本里,找到性能最好的那个配置。然后在这个配置周围,运行多轮,递归寻找可能更好的配置。

基于搜索的方法可能的问题是,抽样和测试可能耗时很长,而且可能陷入局部最优。

实践二:机器学习方法/Machine Learning

img

主要包括三个步骤:

l识别负载特征

对metric进行了降维,metric是指系统的内部状态指标,比如MySQL的innodb_metric。这里用了两个方法,一个是FA,一个是K均值聚类。

识别配置参数和性能的相关性

配置参数有几百个,先通过Lasso线性回归参数和性能的关系进行排序。优先考虑对性能影响较大的参数。

自动调优

匹配目标workload,也就是根据负载在不同配置下面运行,表现出来的metric特性,匹配到最相似的负载。然后,根据匹配到的负载,推荐最优的配置。这里用到高斯过程,同时加入exploration/ exploitation,即探索、利用的过程。

这种方法的问题是,调优过程非常依赖历史数据,要匹配到相似的workload才可以,对训练数据要求比较高。如果匹配不到,则找不到很好的配置。

实践三:深度学习方法/Deep Learning

img

通过深度学习网络,推荐需要最终调节的参数:

获得Workload对应的内部metric

学习调参过程中内部metric的变化规律

学习最终需要调节的参数

这个模型高度依赖训练数据,需要获得各种负载在各种配置下的性能数据。而数据库的负载和配置的组合实在太多了,基本不可能覆盖到。假设匹配不到类似场景,调优结果可能不理想。

实践四:深度强化学习方法/Reinforcement Learning

img

在强化学习中,模拟人与环境交互的过程。Agent会根据观察到的状态state,做出相应的反应action。同时,Environment接受action,改变自己的状态。这个过程会根据一定规则,产生相应的reward,也就是对于action的评价。

最终通过实践比较,我们选取使用强化学习的模型,开发数据库参数调优工具CDBTune。它强调调参的动作,摆脱以数据为中心的做法。

强化学习与参数调优,我们定义如下规则:

规则:每间隔一定时间调参,获得性能数据

奖励:性能提高获得正奖励值,下降获得负奖励值

目标:调参时间/次数尽可能少,获得较高的期望奖励值

状态:系统内部metric指标

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygpxy.html