CBDTune - Jokacer/Learn GitHub Wiki

论文: An End-to-End Automatic Cloud Database Tuning System Using Deep Reinforcement Learning

在云数据库不同的数据库实例和工作负载使得DBA作用变小,需要使用自动对CBD进行在线调优的手段提高CBD的工作效率,首先说明之前一些DBMS自动配置调优的限制:

  1. 采用pipeline管道机制,不能以端到端的方式优化整体性能
  2. 培训样本要求大规模、高质量,难以获取
  3. 大量配置旋钮存在依赖关系
  4. 在云环境中很难应对硬件配置和工作负载的变化,适应性差

因此该论文设计了一个端到端的CBDTune进行自动调优,使用深度强化学习,采用尝试和错误策略,以少量样本学习旋钮设置,以完成初始训练,从而缓解了收集大量高质量样品的难度。

系统概述

首先根据模拟数据进行训练,然后根据在线调谐请求作为训练数据更新模型。

1 离线训练

旋钮(即配置变量)控制着各种要素,比如要使用多少内存做缓存和写入磁盘的频率

由于旋钮之间的非线性相关性和依赖关系,性能不会在任何方向单调变化。此外,由于连续可调参数空间,存在无数的旋钮组合,因此很难找到最佳解决方案

旋钮关系

status:包括14个状态值和49个累积值。示例状态指标包括缓冲区大小、页面大小等,累积值包括数据读取、锁定超时、页中的缓冲池、缓冲池读/写请求、锁定时间等

本文训练数据是一组训练四重的 q,a,s,r*,其中
q是一组查询工作负载(即 SQL 查询)
a是一组旋钮及其在处理 q 时的值
s是处理 q 时的数据库状态(这是一组 63 个指标)
r是处理 q 时的性能(包括吞吐量和延迟)

所有收集的指标和旋钮数据存储在内存池中

训练数据生成

冷启动:利用标准工作负载测试工具(如Sysbench)生成一组查询工作负载

增量培训:在后期实际使用中对每个用户的调优请求,根据用户反馈向培训中添加更多真实行为

2 在线训练

用户向CBDTune提交请求,该请求与现有调优工具(如 OtterTune 和 BestConfig)一致,CBDTune使用欧冠最近150秒收集到的数据,利用离线培训获得的模型进行在线调优

经验样本包含四类信息:

  1. the state of current database st (vectorized internal metrics)
  2. the reward value rt calculated by reward function via external metrics
  3. knobs of the database to be executed at
  4. the database’s state vector after executing the configurations st+1

表示为(st, rt, at, st+1),称其为transition,存放在experience replay memory

DDPG:Deep Deterministic Policy Gradient是一种基于策略的方法,可以学习具有高维状态和操作的策略,特别是内部指标和旋钮配置

算法步骤如下:

  1. 从experience replay memory中提取一批transition
  2. 将st+1馈送给行为网络(actor network),输出旋钮配置a't+1以执行下一个操作
  3. 将st+1和a't+1送入评判网络后获得分数Vt+1
  4. 根据Q-Learning算法分数Vt+1乘以折扣因子(discount factor)γ,再加乘时间t的奖励值,此时可以估计当前状态st的值V't
  5. 馈送st(第一步获得)到评判网络(critic network),并进一步获得当前状态的值Vt
  6. 计算V't和Vt的平方差,通过梯度下降来优化评判网络中的参数
  7. 使用评判网络输出的Q(s = st, µ(st)|θQ)作为损失函数,使用梯度下降指导行为网络的更新,以便获得更高的分数

DBA调优过程:

  1. 假设DBMS初始性能是D0,DBA最终将性能调至Dn
  2. DBA再第一次调整旋钮后性能变为D1,然后计算性能变动△(D1,D0)
  3. 在i-th调优迭代中,DBA期望当前性能更优(即Di性能优于Di-1),然而DBA不能保证每次迭代中的性能都更优,为此,DBA比较了组数据(a)Di和D0,(b)Di和Di-1,如果Di优于D0则调整趋势是正确的,奖励为正,否则为负,奖励值基于△(Di,D0)和△(Di,Di-1)计算

模拟DBA调优方法,用r、T、L表示奖励(reward)、吞吐量(Throughput)、延迟(Latency),T0和L0是代表初始吞吐量和延迟,奖励设置:首先分别计算从时间t-1和初始时间到时间t的性能变化量△,

$$ \triangle T= \begin{cases} \triangle T_{t\rightarrow0}=\frac{T_{t}-T_{0}}{T_{0}}\\ \\ \triangle T_{t\rightarrow t-1}=\frac{T_{t}-T_{t-1}}{T_{t-1}} \end{cases} \triangle L= \begin{cases} \triangle L_{t\rightarrow0}=\frac{-T_{t}+T_{0}}{T_{0}}\\ \\ \triangle L_{t\rightarrow t-1}=\frac{-T_{t}+T_{t-1}}{T_{t-1}} \end{cases} $$

由此得出奖励函数

$$ r= \begin{cases} ((1+\triangle _{t\rightarrow0})^2 -1)|1+\triangle _{t\rightarrow t-1}|,\triangle _{t\rightarrow0}>0\\ \\ -((1-\triangle _{t\rightarrow0})^2 -1)|1-\triangle _{t\rightarrow t-1}|,\triangle _{t\rightarrow0}\le0 \end{cases} $$

为了减少奖励函数的中间调优过程的影响,在奖励函数r结果为正且△t→t-1为负时,我们设置r=0

根据上述步骤计算吞吐量和延迟的奖励rT和rL,然后乘以系数CT和CL,其中CT+CL=1,可被设置,我们用r表示吞吐量和延迟奖励之和

$$ r=CT_rT+CL_rL $$

优点总结如下:

  1. 样本有限:合理使用有限样本,采用try-and-error方法积累经验,降低数据采集难度,通过模型生成样本
  2. 高维旋钮推荐:DDPG可以推荐更好的配置建议
  3. 端到端方法:减少多个分段任务引起的错误,提高建议配置的精度
  4. 降低局部优化的可能性
  5. 适应性强,从经验而非特定值中学习,不依赖于标签或训练数据

性能测试工作量:使用三种基准工具:Sysbench、MySQL-TPCH和TPC-MySQL。 6 个工作负载进行实验,这些工作负载包括 Sysbench、TPC-H 工作负载、TPC-C 工作负载和 YCSB 工作负载的只读、只写和读写工作负载,这与现有工作类似。在 Sysbench 工作负载下,我们设置了 16 个表,每个表包含大约 200K 个记录(约 8.5GB),线程数设置为 1500 个。对于 TPC-C (OLTP),我们选择由 200 个仓库(约 12.8GB)组成的数据库,并将并发连接数设置为 32。TPC-H (OLAP) 工作负载包含 16 个表(约 16GB)。对于 YCSB (OLTP),我们使用 50 的线程和 20M 的操作生成 35GB 数据。此外,Sysbench 的只读、只写和读写分别缩写为 RO、WO 和 RW。当我们使用在另一个条件下训练的模型进行联机调优时,表达式被定义为

$$ M _ {training\ condition}\rightarrow{tuning\ condition} $$

例如,我们使用 8GB RAM 作为培训设置,并用它来在 12GB RAM 上进行在线调优,然后我们将其表示为 M_8G → 12G

Our tuning system uses a deep reinforcement learning model for automatic DBMS tuning. The goal of CDBTune is to tune the knob settings for improving the performance of cloud databases. To the best of our knowledge, this is the first attempt that uses deep RL model for configuration recommendation in databases

Conclusion:

In this paper, we proposed an end-to-end automatic DBMS configuration tuning system CDBTune that can recommend superior knob settings in the complex cloud environment. CDBTune used a try-and-error manner in RL to learn the best settings with limited samples. Besides, our designed reward function can effectively improve tuning efficiency and the DDPG algorithm can find the optimal configurations in highdimensional continuous space. Extensive experimental results showed that CDBTune produced superior configurations for various workloads that greatly improved performance with higher throughput and lower latency compared with the state-of-the-art tuning tools and DBA experts. We also demonstrated CDBTune had a good adaptability whenever the operating environment changed. Note that some other ML solutions can be explored to improve the database tuning performance further

⚠️ **GitHub.com Fallback** ⚠️