SIGMOD19 CDBTune论文分享

摘要

CDB的特点是多样化的instance(主要指硬件条件多样化)和易变化的查询负载。

现有的数据库调参研究有以下几点限制:

  • 采用了pipelined的学习模型,不能以end-to-end的形式优化全局性能

(以Ottertune为例,收集数据库状态后,使用因子分析和kmeans技术做数据预处理,再使用线性回归分析计算参数对性能的影响从而分析重要性,这些都是独立的模块,需要分别调整优化,前一个模块的结果会影响后一个模块,所以是pipelined的方法。而本文没有这些独立开的模块,收集数据库状态后直接投入网络进行训练得到结果,所以是end-to-end的方法。)

  • 依赖大规模且高质量的训练样本,这通常很难获取
  • 很多参数在高维连续空间中,且彼此依赖关系未知,此类调参表现不佳
  • 在云上,对于硬件配置和负载的变化适应性很差

为解决以上限制,本文提出了CDBTune。

  • 是首创的端到端的基于深度强化学习方法推荐参数的自动调参系统
  • 用DDPG方法在高维连续空间中实现了推荐参数
  • 只用有限的样本就可以完成初始训练
  • 采用了reward feedback,实现端到端学习,加速收敛,提高调节效率

关键词

RL(Reinforcement learning)、CDB(cloud database)、DDPG(deep deterministic policy gradient)、RF(reward function)

1.介绍部分

数据库调参方案可分为两大类:基于搜索的方法和基于学习的方法

基于搜索的方法:比如BestConfig,基于一些准则搜索最优配置,这类方法通常时间复杂度高,当一个新的调节请求来了,会重启搜索的过程,这样并没有利用到先前的知识。

基于学习的方法:比如OtterTune,学习历史DBA经验,来推荐配置。弊端如上文提到的那些。

2.系统架构

2.1 工作机制

CDBTune先基于训练数据训练一个模型,然后输入一个调参请求,利用模型推荐参数。

2.1.1 离线训练

训练数据:训练数据是一个集合<q,a,s,r>,q是一个查询负载的集合(比如一组sql查询),a是一组参数配置,s是数据库状态(以mysql为例一共63个metrics,包括14个状态值(比如buffer大小、页大小)和49个积累值(比如缓冲区读请求个数、加锁时间),数据库状态可以通过show status获得),r是性能(包括吞吐和延迟)。

训练模型:RL模型,模型只会离线训练一次。

有两种方式收集训练数据:

1)冷启动:用标准的负载测试工具(sysbench),生成负载集合。对于每一个负载,在CDB上执行该负载,并获得一条初始的四元组训练数据。

2)增量训练:在CDBTune的实际使用中,对于每个用户调参请求,系统都会根据CDBTune的参数推荐获得反馈信息,CDBTune会不断强化模型并且提升推荐准确率。

2.1.2 在线调参

如果用户想调参数据库,只需要提交一个调参请求,OtterTune、BestConfig都是这样的。当收到一个调参请求,系统会收集最近150s的查询负载q,得到当前参数配置a,在CDB上执行查询负载来生成当前状态s和性能r。之后用离线训练的模型做在线调参。最终,表现最好的参数将被推荐给用户。在线调参和离线训练有两个主要的不同。一是不再用模拟的数据,而是用真实负载在CDB上压测来调整模型。二是如果调参已经到了很好的表现或者调参步数到达了设定的阈值,调参就终止了。(在本文实验中,阈值为5)

2.2 系统架构

系统架构如图,控制器在客户端、CDB、CDBTune之间交换信息。当调参请求来到控制器,负载生成器会根据模拟负载或者回放用户负载对CDB做压测。同时,特征收集器收集并处理相关特征。处理完的数据存在内存池中,被输入到RL网络中。最终,推荐器产生参数推荐。

3.RL

为了模拟DBA try-and-error策略以及克服回归调参的缺点,采用RL。

3.1 基本思想

开始阶段,尝试了RL中最经典的Q-Learning和DQN模型,但是这些方法都没解决高维连续空间的问题。最终,采用DDPG方法。同时,reward函数(RF)非常重要,影响模型质量和准确性。通过模拟DBA调参经验,设计了RF函数。

3.2 CDBTune RL

主要挑战是映射数据库调参场景到RL中的action。如图,描述了RL中六个关键元素和数据库调参的对应关系。

Agent:其实就是CDBTune,收到reward(性能的改变)和state,更新调参策略来获得更高的reward(更好的性能)。

Environment:调参目标(精确到CDB中一个instance)。

State:st, agent的当前状态(比如63个特征)。

Reward:rt, 一个标量,t和t-1时刻的性能差异。

Action:at, 一个调参操作,会同时增加或减少所有的参数值。

Policy:定义了在某个时刻和环境下CDBTune的行为,是一个从state到action的映射。policy其实是一个深度神经网络。

RL工作过程:当在CDB执行推荐配置时,当前state会改变,metrics相应地改变。内部特征衡量数据库运行时的表现,外部特征衡量性能,agent根据这两个反馈信息更新policy,以推荐更好的参数。这个过程迭代执行。最终,输出最合适的参数。

3.3 RL for Tuning

不同于监督学习和非监督学习,RL依赖于积累的reward,而不是标签,来训练和学习。RL的目标是基于Environment的reward,优化policy。agent通过利用当前知识或者探索未知的state发现最佳的action(try-and-error)。模型的学习遵循两个原则:action依赖policy,policy被每个state的期望reward驱动。RL可以被分为两类:基于value的方法和基于policy的方法。基于value的方法的输出值是所有action的收益,并且根据最高值选择action。基于policy的方法的输出值是一个policy,可以根据policy立刻输出action。因为本系统需要使用action,所以选择了基于policy的方法。

本文为什么选择DDPG?

Q-Learning:它是一个最经典的基于value的方法,核心是计算Q-tables。Q-table的行代表state的Q-value,列代表action,衡量了如果当前state采用了这个action该有多好。

更新Q-table的公式是Bellman方程:

α \alpha α代表学习率, γ \gamma γ是衰减率(discount factor),如果接近0代表专注于短期reward,如果接近1代表专注于长期reward。在小的状态空间中Q-learning是有效的,一个Q-table不能存储太多的state。但是CDB的state通常多维且复杂。

DQN:DQN可以解决上述状态空间很大的问题。DQN用神经网络而不是Q-table表述Q-value。在DQN中,输入是states,输出一个向量(所有action的Q-value)。DQN采用Q-learning的方法更新Q-value。 它的核心思想有两个:Experience Replay 经验回放和Fixed-Q-Target目标网络。

Experience Replay:设计了一个回放内存池,存储所有的transition。由于采集的样本之间具有时间连续性,算法在连续一段时间内基本朝着同一个方向做梯度下降,不容易收敛。因此,把样本都存到一个内存池中,每个样本都有一个采样优先级(优先级通常根据预测error设置,error越大的样本,采样优先级更高,代表更需要被学习),然后根据采样优先级随机采一批样本进行学习,既可以学习现在也可以学习过去的经验,同时随机的抽取也降低了样本之间的相关性,模型不容易过拟合。

Fixed-Q-Target:没有只采用一个神经网络进行训练,而是设计了两个网络,当前值网络和目标值网络,这两个网络在一开始拥有相同的结构和参数配置。在训练过程中,当前值网络的参数不断地更新优化,只在一定间隔时间点将当前值网络的参数赋给目标值网络。引入目标值网络后,目标Q值的计算相对稳定,提高了训练的稳定性。

DQN流程:

  1. 给定状态 s t s_t st输入当前值网络,算出所有的 Q ( s t , a i ) Q(s_t,a_i) Q(st,ai),选出最大的 Q Q Q,从而对应执行动作 a t a_t at
  2. 获得反馈 r t r_t rt,并且获得新的状态 s t + 1 s_{t+1} st+1
  3. 将 ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1)放入内存池中作为一个新的样本
  4. 从内存池中采集一批样本 ( s i , a i , r i , s i + 1 ) (s_i,a_i,r_i,s_{i+1}) (si,ai,ri,si+1)
  5. 计算一个目标值 y i = r i + m a x Q ′ y_i=r_i+maxQ' yi=ri+maxQ′(这个 Q ′ Q' Q′是将 s i + 1 s_{i+1} si+1投入目标值网络算出的最大 Q Q Q)
  6. 有了 y i y_i yi和 Q Q Q,从而可以得到损失函数,通过损失函数最小化,更新当前值网络的参数
  7. 每经过 C C C次上述流程,就更新目标值网络为当前值网络

DQN输出的actions是离散值。然而,数据库中很多参数的值是连续的。所以这种方法也不行。

4.DDPG CDBTune

DDPG是一个基于policy的方法,是DQN和actor-critic算法的结合,可以直接学习policy。DDPG可以根据当前state立刻获得当前连续action的精确值,而不是计算所有action的Q-value。

4.1 DDPG

将CDB的instance作为Environment E。agent在t时刻从E获得归一化内部特征。agent产生参数设置 a t a_t at,在应用 a t a_t at之后收到一个reward r t r_t rt。与大多数policy gradient方法类似,DDPG有一个带参数的policy函数:

a t = μ ( s t ∣ θ μ ) , θ μ 是状态 s t 到 a c t i o n a t 的映射 a_t = \mu(s_t|\theta^\mu),\theta^\mu是状态s_t到action a_t的映射 at = μ(st∣θμ),θμ是状态st到action at的映射,通常也称为actor。

Critic函数: Q μ ( s t , a t ∣ θ Q ) , θ Q 是可学习的参数 Q^\mu(s_t,a_t|\theta^Q),\theta^Q是可学习的参数 Qμ(st,at∣θQ),θQ是可学习的参数

Critic函数指导actor的学习,它评估了应用该actor产生的参数之后的结果(根据instance的state)。

受DQN和Bellman方程的启发,Q的期望定义为:

算法包括七个主要部分:

1)从内存中提取一批transition ( s t , r t , a t , s t + 1 ) (s_{t},r_{t},a_{t},s_{t+1}) (st,rt,at,st+1)

2)将 s t + 1 s_{t+1} st+1投入actor网络,输出参数推荐 a t + 1 ′ a_{t+1}^{'} at+1′

3)在向critic网络发送 s t + 1 s_{t+1} st+1和 a t + 1 ′ a_{t+1}^{'} at+1′之后,得到value V t + 1 V_{t+1} Vt+1

4)根据Q-Learning算法, V t + 1 V_{t+1} Vt+1由衰减率和 V t V_t Vt的乘积加上t时刻的reward值得到,从而可以估计当前状态 s t s_{t} st的 V t ′ V_{t}^{'} Vt′

5)将 s t s_{t} st投入critic网络,获得当前状态 s t s_{t} st的 V t V_{t} Vt

6)计算 V t V_{t} Vt和 V t ′ V_{t}^{'} Vt′的差平方作为损失函数,根据梯度下降更新critic网络的参数 θ \theta θ

7)用critic网络的输出Q作为损失函数,采用梯度下降平均指导actor网络的更新,所以对于actor网络的每次推荐,critic网络会给一个更高的分数

为什么用有限的样本就可以得到很好的结果呢?第一,因为参数之间的相关性,参数修改以后,数据库的改变不是随机的。第二,建模的时候采用了很少维度的输入和输出,让网络在有限的样本就可以有效收敛。第三,RL通常需要多维的样本而不只是大量的样本,对于CDBTune,改变数据库参数并收集表现数据,这些数据在学习的过程中是多维的。RL可以利用多维的数据不断更新和优化表现。最后,有效的RF也是其中一个原因。

4.2 Reward function

DBA的调参过程如下:

1)假设数据库当前表现是 D 0 D_0 D0,并且被DBA调整后的最终表现是 D n D_n Dn。

2)DBA调参,第一次调参之后的表现是 D 1 D_1 D1。然后DBA计算表现差异 δ ( D 1 , D 0 ) \delta(D_1,D_0) δ(D1,D0)

3)在第i次调参之后,DBA期待当前的表现好于前一次,但是他不能保证做到。所以DBA会比较两个值:

一个是 D i D_i Di和 D 0 D_0 D0的差异,一个是 D i D_i Di和 D i − 1 D_{i-1} Di−1的差异。如果 D i D_i Di比 D 0 D_0 D0好,说明调参的方向是对的,reward是正的。否则,reward是负的。reward的值也是针对这两个差异值进行计算。因此,DBA每次调参不只是考虑前一次的调参,还要考虑初始状态。令r代表reward,T代表吞吐,L代表延迟。 T 0 T_0 T0和 L 0 L_0 L0代表调参之前的吞吐和延迟。

在时刻t,计算针对t-1时刻和初始时刻的性能变化率。

由此设计reward函数:

同时需要定义吞吐和延迟在reward中所占的比重,因此可以自定义两个系数,系数之和为1。

如果优化的目标是吞吐和延迟,RF不需要改变,因为RF独立于硬件条件和负载改变,只依赖于优化目标。

作者也设计了其他的RF,比如:当前性能和前一次性能的差值,当前性能和初始性能的差值。但是只有上述RF可以达到最好的收敛和性能效果。

作者也研究了两个系数如何影响数据库的性能。在本实验中,设置C_L=0.6。

5.实验

负载:实验基于三种benckmark工具生成负载:Sysbench,MySQL-TPCH,TPC-MYSQL。

在六个工作负载上进行实验:read-only、write-only、read-write、TPC-H、TPC-C、YCSB。

调参系统:主要是与BsetConfig还有OtterTune进行了对比。

DBA数据:邀请了三位腾讯的资深DBA,从他们的调参结果中选出了最好的数据。

设置:CDBTune由PyTorch和scikit-learn库等工具实现。所有实验在腾讯云服务器上运行。

实验运用了七种CDB instance,硬件配置均不同。在CDBTune和OtterTune、BestConfig推荐参数的所有实验中,选择了最优结果。

5.1 效率对比

5.1.1 执行时间

记录了每一步的平均运行时间,大约为5分钟,主要分为5部分(除去数据库重启的2分钟):

a)压测时间:负载生成器收集数据库特征的时间

b)特征收集时间:从内部特征获得state向量的时间+从外部特征计算reward的时间

c)模型更新时间:训练过程中前向计算和反向传播的时间

d)推荐时间:从输入数据库state到输出参数推荐的时间

5)应用时间:从输出参数推荐到应用参数的时间

离线训练:CDBTune运用了大约4.7小时训练266个参数,2.3小时训练65个参数。注意参数个数只影响训练时间,不影响调参时间。

在线调参:对于每一个调参请求,执行了5步,线上调参时间是25分钟。

5.1.2 Baseline对比

CDBTune vs OtterTune vs BestConfig vs DBA

如图,对于每个调参请求,每种方案平均分别用了多少时间调参,可以看出CDBTune耗时最短。

5.2 有效性对比

1)考虑了三种调参顺序,一种是根据DBA以往调整各个参数的次数来做调参排序。一种是Ottertune发现的调参顺序。一种是CDBTune随机选择的调参顺序。可以发现在这三种调参顺序下,随着调参数目的增加,CDBTune始终保持了最好的性能。同时,DBA和Ottertune是需要提前对参数进行排序,但是CDBTune通过特征提取自动完成了这个过程。

2)在CDB-A的instance下,针对不同工作负载进行测试,可以看出,在所有的工作负载下,CDBTune的吞吐和时延都是最优的。

5.3 适应性

5.3.1 对于内存大小和磁盘容量变化的适应性

相比本地数据库,云数据库的特点是硬件环境易于调整。所以,要求本系统在不同的硬件条件下都可以做很好的调参。因此,做了多组实验,比如在8G的内存下训练模型,在32G的内存下推荐参数。以及相应地调整磁盘容量。可以看出,CDBTune始终让数据库达到了最佳的性能,即它对于硬件环境的改变有很强的适应性。

5.3.2 对于工作负载变化的适应性

用工作负载A下训练的模型,对工作负载B下的系统做参数推荐。对比多组实验,可以发现CDBTune始终让数据库达到了最佳的性能,即它对工作负载变化也有很强的适应性。

相关推荐
鱼很腾apoc几秒前
【MySQL】 第2期 查询与函数系统详解:从基础 CRUD 到复合多表查询
linux·数据库·学习·mysql·dml
前端 贾公子24 分钟前
LangGraph == 图的状态(State)管理 (下)
运维·服务器·数据库
zlwool34 分钟前
机械行业ERP与进销存的合规选型边界
数据库·erp
梦想的颜色40 分钟前
【AI速览】RAG 向量数据库选型:Milvus、Chroma、Qdrant、PGVector 全维度横向对比
数据库·milvus·chroma·rag·pgvector·向量库·qdrant
小溪学编程1 小时前
向量数据库 Milvus 基础实践:从入门到上手
数据库·milvus
数据最前线1 小时前
雪上加霜,Oracle向蓝色巨人最后的阵地发起挑战
数据库·oracle
于眠牧北1 小时前
Charles配置指定域名抓取和雷电模拟器中抓取APP接口配置
数据库·redis·缓存
福娃筱欢2 小时前
57014 canceling statement due to user request(金仓 KingbaseES)
数据库·kingbase·金仓数据库
ClouGence2 小时前
SAP HANA 数据同步遇到长事务,如何兼顾实时性与完整性?
数据库·后端
数据库小学妹2 小时前
数据库管理工具有哪些?2026主流工具分类与选型对照
数据库·数据库管理工具·数据库工具·信创数据库·数据库客户端