likes
comments
collection
share

浅析几类数据库自动调参方法

作者站长头像
站长
· 阅读数 16

自动调参是当前数据库领域的热门话题之一。在不同环境和 Workload 下,为数据库设置不同参数组合会使其有不同性能表现。部署数据库到新环境时,往往需要 DBA 根据经验手动调参,以让数据库有最佳性能。由于现代数据库复杂度越来越高,DBA 手动调参难度越来越大,因此需要自动调参算法接入。

按照 ML Model 划分,当前自动调参算法主要可以分为三大类

  1. 基于高斯过程回归的(以 OtterTune 为代表)
  2. 基于深度神经网络的
  3. 基于深度强化学习的(以 CDBTune 的 DDPG 算法为代表)

目前已有的实验证明,在真实 workload 上,这三类算法均能找到效果接近的最优解,效果比传统 DBA 调参更好,主要是算法收敛速度不太一样。

本文主要着重于讨论三类 ML Model 异同。

Overview of AutoTune

OtterTune 总结现在调参工具迭代的步骤为:

  1. 执行目标 workload
  2. controller 在执行完成后收集 runtime metrics and configuration knobs
  3. 上传到 tuning manager
  4. tuning manager 从 controller 中收集最新执行结果并存储
  5. tuning manager 基于 ML Model 生成新一轮 knobs
  6. 在目标 workload 上执行新的 knobs

浅析几类数据库自动调参方法

ML Model

高斯过程回归

更准确的说,这一类优化模型指的是以高斯过程(GP)为代理模型的贝叶斯优化模型。最经典的工作就是 CMU 提出的 OtterTune,主要分为以下步骤

数据预处理(OtterTune 专属)

GPR 的特点是处理不了太高维度的数据,因此需要先识别出最重要的 knobs。首先确定 DBMS 度量的子集,算法使用因子分析(factor analysis)的降维技术,能够将度量减少到更小的因子集合。将度量降维后,继续计算对目标函数影响最大的旋钮的排序列表。OtterTune 使用了 Lasso 的特征选择方法,其中 knob 数据作为输入 X,输出的是结合已经修剪过的度量的目标数据。Lasso 在 X 和 y 之间的回归过程中确定了重要的 knob 顺序。

Knob 推荐

确定完 knob 后剩下的都是高斯过程回归的基本操作。GPR 对输入的采样数据 x 输出各个采样点的目标值 y 和不确定性值 u,通过 Acquisition Function 根据这两个值推出一个 acq value。acq value 可以理解为在探索和最优值间的一个 trade off。

浅析几类数据库自动调参方法

深度神经网络

由于 GPR 在高维上效果不佳,因此也有人考虑直接用 DNN 去找最佳参数。

OtterTune 在对比实验中用了两个有 64 个神经元的隐藏层,使用 ReLU 函数激活,另外使用 dropout(rate=0.5) 避免过拟合。在推荐参数阶段,OtterTune 还给 DNN 的参数加了高斯噪声,以在探索和最优值中找到一个 trade off,类似于 GPR 的 Acquisition Function。

DNN 的调参流程和 GPR 完全一致。

深度强化学习(DDPG/DDPG++)

DDPG 基于深度强化学习中的 Actor-Critic 算法(演员-评论家 算法),是目前针对连续动作空间情况比较好的深度强化学习算法。华中科大的 CDBTune 及其后续一系列工作提出将 DDPG 算法应用在自动调参中。DDPG 核心组件有 (1) Actor (2) Critic (3) Replay Memory

Actor 和 Critic 都是一个 MLP 结构。Actor 根据给定状态选择动作(即 Knob 取值),Critic 根据当前状态对选定动作进行评估,并提供反馈来指导 Actor。Actor 输入是 workload 执行度量(即执行的性能指标?),输出推荐的 Knob 值,Critic 将度量和推荐的 Knob 作为输入,输出一个 Q-Value,DDPG 的 Critic 的输出为未来所有预期奖励的叠加。Replay Memroy 存储按预测误差赋予权重的训练数据。

对于每个 Knob K,DDPG 构造一个 tuple,包含 (1) 先前的度量 m_prev (2) 当前度量 m (3) 当前奖励 r

收到新数据时 CDBTune 通过比较度量值计算奖励,按权重从 Replay Memory 中采样训练数据训练 Actor-Critic。通过当前度量 m 获得新 Knob 推荐值。

DDPG++ 则简化了 DDPG 的一些实现,以提高收敛速度。(1) DDPG++ 使用即时奖励而不是累计未来奖励(累计未来奖励在黑盒优化中好像没什么必要?而且还会显著提高奖励的误差)(2) DDPG++ 使用了一个更简单的奖励函数,不考虑之前的或基础目标值。(3) DDPG++ 在得到一个新的结果时,从 Replay Memory 中获取多个小批量值,加速训练过程。

浅析几类数据库自动调参方法

评估

实验结果摘自: An Inquiry into Machine Learning-based Automatic Configuration,是 OtterTune&CMU 做的一个调研类的自动调参工作,实验在 Oracle 上进行,原始可调参数超过 400 个。

基准线是默认参数执行结果,纵轴是调参后的性能提升幅度。

实验一中调优 knob 完全由 DBA 选出。可以看出几种算法性能差不算太多,在不同 Workload 上各有一点比较小的性能差别。比较令人惊奇的是低维度下 DNN 效果是最好的?较高维度下 GPR 也表现得不错,和很多 survey 说的似乎不太一样。作者研究参数含义后发现,GPR/DDPG 在优化器选项上开启了一个次优版本,导致其在低维下效果不如 DNN。

浅析几类数据库自动调参方法

作者指出按执行的总时间来算,收敛速度最快的还是 GPR 方法(此处不知道为啥没图)

浅析几类数据库自动调参方法

转载自:https://juejin.cn/post/7280436307913670696
评论
请登录