一杯茶的功夫就把日志搜索引擎性能调优了?

Beaver 是由日志易自主研发、安全可控的搜索引擎,由 Master、Broker 和 Datanode 三部分组成,已广泛应用于存储和分析大型分布式系统生成的日志。Beaver 拥有大量与性能相关的配置项,由于手动配置费时费力,并且有时需要修改相关配置以适配特定环境,所以自动调整配置参数优化性能是当前迫切需要解决的问题。

背景调研

目前业界有许多自动调参的项目和算法实现,例如 CMU 开源的关系型数据库自动调参工具 OtterTune[1]、PingCAP 仿作的 TiKV 自动调参工具[2]等,都为我们提供了大量的论文以及开源算法代码。

1、 OtterTune

数据库有很多参数,比如 MySQL 有几百个参数,Oracle 有上千个参数。这些参数控制着数据库的方方面面,很大程度上影响了如缓存容量和检查点频次等数据库性能。

对于不同的硬件配置,不同的工作负载,对应的最优参数文件都是不同的,这些复杂性令数据库调优变得更加困难。DBA(Database Administrator,即数据库管理员)不能简单地重复使用之前调好的参数文件,他们需要花大量时间根据经验来调优数据库的参数,而公司则需要花大价钱来雇佣资深 DBA。

为解决上述问题,卡内基梅隆大学数据库小组的教授、学生和研究人员开发了一个数据库自动调参工具 OtterTune,它能利用机器学习对数据库的参数文件进行自动化调优,利用已有的数据训练机器学习模型,进而实现自动化地推荐最优参数。它能很好地帮助 DBA 进行数据库调优,将 DBA 从复杂繁琐的调参工作中解放出来。

OtterTune 的目的是为了帮助 DBA,让数据库部署和调优更加容易,用机器学习代替人工来完成数据库调参这个冗繁但又很重要的工作,让技术人员甚至不需要专业知识也能顺利完成。

OtterTune 分为客户端和服务端,目标数据库是用户需要调优参数的数据库:

  1. 客户端安装在目标数据库所在的机器上,收集目标数据库的统计信息,并上传到服务端。
  2. 服务端一般配置在云上,获取到客户端的数据之后,开始训练机器学习模型并推荐配置文件。

客户端接收到推荐的配置文件后,配置到目标数据库上,并测量其性能。以上步骤可重复进行,直到用户对其推荐的配置文件满意为止。

2、AutoTiKV

AutoTikv 是一个用于对 TiKV 数据库进行自动调优的工具。它是根据 SIGMOD 2017 年发表的一篇论文所设计[3],能够使用机器学习模型对数据库参数进行自动调优。

AutoTiKV 吸取了 OtterTune 的设计理念,并简化了相关结构。

设计的调优过程如下:

图一:整个过程会循环跑 200 个 round(用户可自定义),或者定义为直到结果收敛为止。

3、ML 模型

AutoTikv 使用了和 OtterTune 一样的高斯过程回归(Gaussian Process Regression,以下简称 GP)来推荐新的 knob,它是基于高斯分布的一种非参数模型。

在还没有利用机器学习模型对参数文件的效果进行预测的时候,OtterTune 使用的是随机采样的方式来收集初始数据。

当有足够的数据 (X,Y) 时,OtterTune 训练机器学习模型进行回归,即估计出函数 f:X→Y,表示对于参数文件 X,用 f(X) 来估计数据库延迟 Y 的值。如此,问题则变为寻找合适的 X,是 f(X) 的值尽量小。这样在 f 上面做梯度下降即可找出合适的 X[4]。

如图二所示,横坐标是两个参数:缓存大小和日志文件大小,纵坐标是数据库延迟(越低越好)。

图二:OtterTune 高斯过程回归模型

OtterTune 用高斯过程回归模型估计出了 f,即给定这两个参数值,估计出对应的数据库延迟。接着用梯度下降找到最合适的参数值,使延迟尽可能低。

高斯过程回归的好处:

  • 和神经网络之类的方法相比,GP 属于无参数模型,算法计算量相对较低,而且在训练样本很少的情况下,GP 表现比神经网络算法(Neural Network ) 更好。
  • 它能估计样本的分布情况,即 X 的均值 m(X) 和标准差 s(X)。若 X 周围的数据不多,则它被估计出的标准差 s(X) 会偏大(表示这个样本 X 和其他数据点的差异大)。直观的理解是若数据不多,则不确定性会大,体现在标准差偏大;反之,数据足够多时,不确定性减少,标准差会偏小。这个特性后面会用到。

但 GP 本身其实只能估计样本的分布,为了得到最终的预测值,我们需要把它应用到贝叶斯优化(Bayesian Optimization)中[5]。

贝叶斯优化算法大致可分为两步:

  1. 通过 GP 估计出函数的分布情况。
  2. 通过采集函数(Acquisition Function)指导下一步的采样(也就是给出推荐值)。

采集函数(Acquisition Function)的特性是在寻找新的推荐值的时候,能够进行平衡探索(Exploration)和利用(Exploitation)。

  • Exploration:在目前数据量较少的未知区域探索新的点。
  • Exploitation:对于数据量足够多的已知区域,利用这些数据训练模型进行估计,找出最优值。

在推荐的过程中,需要平衡上述两种指标。Exploitation 过多会导致结果陷入局部最优值(即重复推荐目前已知最好的点,但可能还有更好的点没被发现),而 Exploration 过多又会导致搜索效率太低(即一直在探索新区域,而没有对当前比较好的区域进行深入尝试)。而平衡二者的核心思想,是当数据足够多时,利用现有的数据推荐;当缺少数据时,在点最少的区域进行探索,探索最未知的区域能够提供最大的信息量。

贝叶斯优化的第二步就可以帮我们实现这一思想。前面提到, GP 可以帮我们估计 X 的均值 m(X) 和标准差 s(X),其中均值 m(X) 可以作为 Exploitation 的表征值,而标准差 s(X) 可以作为 Exploration 的表征值[6],这样就可以用贝叶斯优化方法来求解了。

使用置信区间上界(Upper Confidence Bound&#x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值