欢迎你们前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~算法
做者:邢家树,高级工程师,目前就任于腾讯TEG基础架构部数据库团队。腾讯数据库技术团队维护MySQL内核分支TXSQL,100%兼容原生MySQL版本,对内支持微信红包,彩票等集团内部业务,对外为腾讯云CDB for MySQL提供内核版本。
导语:CDBTune是腾讯云自主研发的数据库智能性能调优工具。相比于现有业界通用方法,CDBTune无需细分负载类型和积累大量样本,经过智能学习参与参数调优,得到较好的参数调优效果。数据库
数据库系统复杂,且负载多变,调优对DBA很是困难:微信
总结起来就是三大问题:复杂,效率低,成本高。腾讯云的智能性能调优工具如何在不断实践中破解这些问题呢?网络
实践一:启发式搜索方法/Search-Based Algorithm架构
输入包括两部分:机器学习
Configuration Sampler:会对输入参数进行取样,生成配置;配置会被设置到SUT(也就是待调优环境)。System Manipulator:它和SUT进行交互,设置参数,而且会得到SUT的性能数据。ide
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
主要包括三个步骤:
l识别负载特征
对metric进行了降维,metric是指系统的内部状态指标,好比MySQL的innodb_metric。这里用了两个方法,一个是FA,一个是K均值聚类。
配置参数有几百个,先经过Lasso线性回归参数和性能的关系进行排序。优先考虑对性能影响较大的参数。
匹配目标workload,也就是根据负载在不一样配置下面运行,表现出来的metric特性,匹配到最类似的负载。而后,根据匹配到的负载,推荐最优的配置。这里用到高斯过程,同时加入exploration/ exploitation,即探索、利用的过程。
这种方法的问题是,调优过程很是依赖历史数据,要匹配到类似的workload才能够,对训练数据要求比较高。若是匹配不到,则找不到很好的配置。
实践三:深度学习方法/Deep Learning
经过深度学习网络,推荐须要最终调节的参数:
这个模型高度依赖训练数据,须要得到各类负载在各类配置下的性能数据。而数据库的负载和配置的组合实在太多了,基本不可能覆盖到。假设匹配不到相似场景,调优结果可能不理想。
实践四:深度强化学习方法/Reinforcement Learning
在强化学习中,模拟人与环境交互的过程。Agent会根据观察到的状态state,作出相应的反应action。同时,Environment接受action,改变本身的状态。这个过程会根据必定规则,产生相应的reward,也就是对于action的评价。
最终经过实践比较,咱们选取使用强化学习的模型,开发数据库参数调优工具CDBTune。它强调调参的动做,摆脱以数据为中心的作法。
强化学习与参数调优,咱们定义以下规则:
咱们把系统的内部metric叫作内部指标;外部的性能数据,好比TPS/QPS/Latency叫作外部指标。在数据库参数调优场景中,具体作法是:Agent选择一个参数调整的action(也多是多个参数)做用于数据库,根据执行action后的外部指标,计算应该得到的即时奖励。
在强化学习对应到参数调优这个场景。此场景的问题是:强化学习须要构造一张表,代表在某种状态下,执行某个操做,得到的收益后,咱们才知道执行什么操做得到的收益是最大的。可是数据库的状态空间(性能指标)和动做空间(配置组合)特别大,组合这样一张表出来是不可能的任务。此时深度强化学习就派上用场了,咱们要经过一个深度网络逼近这个Q-table的效果,也就是CDBTune的实现方法。
CDBTune实现
此模型主要分红两部分。
l数据库环境:如图左边,参数会被设置到这个环境里,而后环境的内部指标和外部指标会被采集,反馈给右边的模型。
l深度强化学习网络:如图右边,实现算法相似DeepMind发布的Nature DQN,采用两个Q-Network。
另外,Replay Memory是咱们的记忆池,历史数据会被记录下来。而后训练会不断进行,不断加入记忆池。深度学习网络会从记忆池中随机选取样本机型训练。
在估计一个action的reward的时候,基于一个假设:咱们的回报取决于对将来每一步的结果影响;而影响最大的,是最近的回报。经过
近似得到这个Q值。对于一个样本(s, a)而言,咱们能够获得真正的回报r。这时候咱们能够得到他们以前的Loss,调整左边的网络,使两边的Loss愈来愈小。这样咱们的网络就会逐渐收敛,得到更好的推荐。
数据形式和相关策略
效果评估
经过测试能够看到,在不须要任何前期数据收集的状况下,CDBTune经过自我学习参数调优过程,达到较优的参数调优效果,CDBTune调优得到的吞吐和延时性能均达到较为理解的水平。这也是深度强化学习方法相对于其余几种方法的优点所在。
总结:
基于DQN智能调参的优点
在实践过程当中,咱们也遇到一些问题:
针对这些问题,咱们也在不断优化和改进咱们的模型,优化参数。相信CDBTune能够在将来取得更好的效果。
此文已由做者受权腾讯云+社区发布,原文连接:https://cloud.tencent.com/dev...
欢迎你们前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~