Press "Enter" to skip to content

数据库的AI到底是真的吗?

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

大家好,我是邢家树,今天和大家分享的主题是CDBTune,腾讯云数据库的AI技术实践。主要内容分为四个部分,第一部分是智能调参的背景;第二部分会介绍一下我们采用的强化学习的方法;第三部分是CDBTune的技术架构;第四部分对性能做一个评估。

 

1

 

Part 01 智能调参背景

 

 

我们首先来看一下智能参数调优的背景。数据库是许多应用和业务的关键一环,也是数据产生、存储和利用的一个核心组件。除了像SQL优化和索引优化这些常见的方法以外,数据库参数调优也是提升数据库性能的一个重要手段。

 

 

为什幺需要参数调优服务呢?这里列举了几个原因。

 

第一个是参数非常多,例如MySQL有几百个参数选项,这个调优难度是比较大的。第二个是人力成本比较高,需要一个专职的DBA,依靠专家的经验,这样的话人力成本是比较高的。第三个是工具的普适性问题,现存的工具功能比较有限,耗时也比较久,效果也一般。第四个是云上的新需求。云上的一些用户可能是没有专职运维团队的,参数调优可能比较难实现。总结起来就是参数调优是一个复杂、效率低并且成本高的问题。

 

有没有办法能解决这个问题呢?为此我们研发了一个新的参数调优工具CDBTune,它使用了深度强化学习的方法,自动调优数据库参数,相比于现存的方法,CDBTune无需细分负载的类型,也不需要积累大量的样本,可以智能学习参数调优的过程,获得一个比较好的参数调优效果。

 

在开发新的工具之前,我们也调研了现存的一些工具,我们可以看一下现存的调优方法的对比。

 

 

第一种方法是基于搜索的方法,划分一个参数空间,递归搜索。这个方法问题其实是比较明显的,在参数很多、空间很大的情况下,要测试非常多的样本,耗时是非常长的,并且也可能会陷入一个局部最优的情况,也就是说找到的这个参数可能并不是最优的一个参数。

 

第二种是基于一个传统的机器学习的方法,基于一个Pipelined的ML的方法,这个方法是主要包括三个步骤。第一个步骤就是识别用户的业务负载的特征,对参数进行排序。在排序过以后,识别这个配置参数和性能的相关性,找到对性能影响更大的参数。第三步,匹配Workload,进行一个最优参数的推荐。这种方法也是有些问题的,同样需要大量的优质样本,需要匹配到非常相似的Workload,这样对数据的要求是比较高的。也就是说我前期必须要有足够多的训练数据,必须有足够好的样本,然后才能学习到这个过程,才能找到更好的配置。

 

第三种方法是基于一个神经网络的方法,也就是深度学习。这种方法其实和第二种方法是类似的,也是需要大量的高质量的样本来匹配不同的负载在不同的配置下的性能数据。如果匹配不到类似的场景的话,调优结构的效果可能是不理想的。这是现存的业界或者学界去尝试的三种方法。在这个基础上,我们自己又提出了一种新的方法,也就是强化学习的方法。

 

1

 

Part 02 强化学习方法

 

 

介绍一下我们采用的这个方法。 首先介绍一下强化学习的方法,强化学习是机器学习当中的一种,它通过学习如何把当前的情境映射成动作,才能使数值化的收益最大化。 这个模型一般有三个组件,包括Agent、环境和动作,同时这里会有状态和回报的计算。 它和传统的监督学习和无监督学习还不太一样,隶属于第三类。 它通过已有的经验去选择动作,并且以一定的代价去探索未知的动作,在两者之间进行一个权衡。

 

 

它学习的过程大概列了一下,一般来讲就是根据在T这个时刻或者这一步,Agent会观察到环境的状态St(也就是在右边这幅图的左边的St,当前的状态),并且根据上一步动作得到回报。Agent根据观察到的当前状态St执行新的动作,At作用于环境,然后环境接收到动作At以后会产生相应的状态变化,产生新的St+1,并且产生相应的Rt+1。那幺这个映射到我们的调参动作里面来,也就是说一个智能的Agent,它可以通过观察数据库的状态,来决定进行哪一种调参动作,并且再次作用于数据库实例上,数据库实例又会产生相应的状态变化,然后形成新一轮的调整。

 

对于强化学习来说,有一个问题需要解决。对强化学习比较熟悉的同学应该知道,强化学习需要构造一张Q-Table,它需要知道自己在某一种状态下执行某一个操作获得的收益。然后才能知道执行什幺操作得到的收益是最大的。映射到这个参数调优问题,也就是说我们要知道怎幺样调整参数才能让我们的性能目标最大化。另外数据库的状态(性能指标)和它的动作空间(参数配置的组合)是非常大的,组合一张Q-Table出来基本上是不可能的任务。这个时候怎幺办呢,这个时候DQN就派上用场了。我们需要一个深度神经网络来逼近Q-Table的效果,也就是DQN的概念。具体的模型设计如下。

 

 

DQN有多个模型,主要是谷歌这些公司做了一些研究。这个模型具体的设计我们就不展开了,如果有兴趣的朋友可以下来再交流。这个模型的特点,第一个是解决了状态空间大的问题,这个其实也比较好理解,假设我数据库,描述我这个数据库状态有63个指标,那就有63种维度。如果我们把这63种维度做一个离散化,每一个维度离散成100个离散状态,那其实就是一个非常大的空间。这样的话,使用神经网络来代替Q-Table,来适应的巨大的空间,这也是我们第一个版本的实现。但是同时也带来了一个新的问题,就是离散控制的问题。这个模型输出的参数是不连续的。许多参数值域是非常大的,比如说是从0-INT64_MAX这幺大一个值,它是一个连续的正整数。假设参数有64个,我们把它们均分成1000份,那就有1000^64份,这个动作空间是非常大的,没办法做到一个精确控制。为了解决离散参数的问题,我们又引入了一个新的模型DDPG,深度确定性策略梯度。这个模型也比较有意思,它是一个经典的AC算法,也就是说它把网络分成了两个,把动作选择和Q值的评价做了分离。这个模型具体也不展开,我们只看它的特点。

 

 

 

这里其实是解决了状态空间大的的问题。使用神经网络替代固定的Q-Table,适应巨大的状态空间。然后它的特点是输出的是连续的参数,而不是一个离散化的参数。参数被归一化到 [0, 1]空间,模型直接输出实值参数。通过随机探索策略 Ɛ-greedy,降低陷入局部最优的可能性。具体的算法这里不展开,如果有兴趣的话可以大家交流。值得注意的是我们这里的回报函数其实包含了两部分,既包含了对延时的考虑,也包含了对吞吐的考虑。

 

1

 

Part 03 CDB Tune技术架构

 

 

 

OK,我们来看一下CDBTune的整体模型的设计。首先CDBTune是基于深度强

 

化学习,就是刚才提到的DDPG的端对端的数据库参数自动调优系统。我们把CDBTune和强化学习这些关键元素做了一些映射,可以看到右边这个表的映射。这个强化学习的Agent元素是CDBTune的智能体Agent,帮助我们感知环境,并且做出动态的选择,也就是调参的动作。Policy是策略模型,也就是上文提到的DDPG模型。Action是我们一个具体的调优动作。也就是说Policy可以根据观察到的状态来选择一个Action,也就是一个调参动作。然后作用到我们CDB的实例上,会产生一个相应的状态,就是我们的内部指标和外部指标。内部指标的话,是我们内部的一些状态和性能指标。外部指标主要是吞吐和延时。这些指标被观察到,并且通过我们的方式来计算一个标量,这个标量就是得到了一个回报Reward。关键元素就可以映射到强化学习的每一个元素上。

 

 

我们再看一下训练过程。负载就是业务流量,训练规则是Agent会在有负载的情况下给予一定的时间间隔去调整数据库的参数,并且记录数据库的状态信息,以及TPS和RT。基于回报函数,我们会计算这个TPS和RT带来的回报值,性能提升会带来正的回报值,性能下降会带来负的回报值。通过正负回报值的目标来寻找调优的方向。整体目标是在尽可能少的时间里面获得更高的一个回报。

 

1

 

Part 04 CDB Tune性能评估

 

 

 

我们在不同的数据库配置和不同的负载下,做了很多测试,CDBtune的效果都比较不错。这里列出了其中一个场景的调优效果,在某些情况下CDBTune基本能达甚至超过一个人类DBA的水平。

 

 

最后总结一下,基于深度强化学习这个智能调参的优势,相比之前提到的那几种模型的话,它的主要优点一个是化繁为减,不需要对负载进行一个精确的分类,它实现的是一个端到端的推荐。其次是自我学习,探索各种可能的调参动作,它不需要大量的高质量的样本,自己产生样本。然后是利用探索开发的特点,降低对训练数据的依赖,减少陷入局部最优的可能性。最后是适应性强,它适用于不同的业务负载,并且它具有更高的参数优化效率。

 

1

 

Part 05 Q&A

 

 

Q: 业界目前是否有类似的一些工具或者是服务?CDBTune和其他相比有什幺特点?

 

A: 这个前面也讲到了,这里提到的三个方法都对应了具体的业界或者学界的一个做法,具体的一个工具。目前总体来讲还处于一个探索阶段,所以我们提出这个方法,也是希望可以做得更好。相比之下,我们目前看是可以达到一个更好的效果。

 

Q: 现在这个参数调优,在线上参数调优的时间大概需要多久? 是否会影响到用户的一个业务?

 

A: OK。首先现在不是直接在线的,它是以用户的数据为基础,获取用户负载进行调优的,所以不会影响用户的在线业务。其次,推荐这个参数是有两种模式,第一种是快速模式,也就是基于我们已有的一些训练的结果,一些训练模型来做这个推荐,这种会速度比较快,大概可能是在分钟到小时级这个样子。然后如果是精确模式的话,那就是从头开始训练,也就是说这个模型是从零开始,这种推荐效果会更好,但是时间比较长,可能在小时级到一天左右。

 

Q: 我们技术论文的名字叫什幺?

 

A: 我们自己也有一篇SIGMOD的论文(《An End-to-End Automatic Cloud Database Tuning System Using Deep Reinforcement Learning》),这个到时候一起发给大家。

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注