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

自动调参是当前数据库领域的热门话题之一。在不同环境和 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 方法(此处不知道为啥没图)

相关推荐
青云交1 小时前
大数据新视界 --大数据大厂之 Kafka 性能优化的进阶之道:应对海量数据的高效传输
大数据·数据库·人工智能·性能优化·kafka·数据压缩·分区策略·磁盘 i/o
Sarapines Programmer1 小时前
【Sqlite】sqlite内部函数sqlite3_value_text特性
数据库·sqlite·数据转换·科学计数法
打码人的日常分享1 小时前
企业人力资源管理,人事档案管理,绩效考核,五险一金,招聘培训,薪酬管理一体化管理系统(源码)
java·数据库·python·需求分析·规格说明书
好好学习的人1 小时前
SQL第12课——联结表
数据库·sql
程序员古德1 小时前
系统架构设计师论文《论NoSQL数据库技术及其应用》精选试读
数据库·nosql
青云交1 小时前
大数据新视界 --大数据大厂之 DataFusion:超越传统的大数据集成与处理创新工具
数据库·内存管理·apache hive·数据集成·大数据处理·datafusion·查询处理·powercenter
s_little_monster1 小时前
【QT】QT入门
数据库·c++·经验分享·笔记·qt·学习·mfc
hefaxiang2 小时前
【MYSQL】mysql约束---自增长约束(auto_increment)
数据库·mysql
琴智冰2 小时前
SpringBoot
java·数据库·spring boot
AAEllisonPang2 小时前
Oracle 时间计算
数据库·oracle