海山数据库(He3DB)+AI(三):旋钮调优问题综述

@[toc]

0 背景

在数据库优化问题中,旋钮调优(knob tuning)对系统的性能或资源利用起着至关重要的作用,该问题面临如下挑战:1)数据库配置中有成千上百的旋钮配置,如何确定哪旋钮会影响数据库的性能和资源使用?2)面对巨大的搜索空间,如何在有限时间内找到合适的配置参数?3)随着云服务的增长,需要为各种情况如不同的应用程序、数据集和硬件,调整大量的数据库实例,如何应对越来越棘手的情况?

随机机器学习的发展,越来越多基于学习的调参方法被提出,其主要思想是搜集旋钮配置及对应的性能数据,让模型去训练学习,使得在遇到相似场景时,能够快速获得较好的参数推荐。本次带来TKDE上的论文Automatic Database Knob Tuning: A Survey[1],对该问题进行的定义和现有方法进行介绍。

1 问题介绍

旋钮调优问题可以被分为4个子问题:1)调优的目标是什么?2)调什么?3)以什么去调?4)如何调?如图1所示。


图1 旋钮调优问题

1)调优的目标是什么?

对于一个数据库系统来说,调优的目标主要可分为两个方面:一是提高系统的性能,如吞吐量、延迟;二是在不牺牲性能的情况下提高资源利用率。此外,对于一个调优方法来说,其评价标准除性能和资源利用率外,还包括适应性和安全两个维度。

2)调什么?

调整的是数据库系统中数以千计的旋钮。旋钮的类型或连续或离散,带来巨大的搜索空间,此处面临两个挑战:一是如何评估不同旋钮之间的相关性,二是在不同的任务中如何选择重要的旋钮进行调整。

3)以什么去调?

假设确定了合适的旋钮,那如何来确定调优特征,如工作负载,数据库状态和硬件环境,这些特征反映了数据库的执行行为,潜在的影响调优性能。

4)如何调?

在确定了调整旋钮和调优特征后,使用什么方法来进行调整,这里面临两大挑战:一是巨大的搜索空间,二是调优成本。旋钮之间的参数组合是一个巨大的搜索空间,对于每个旋钮设置,需要执行工作负载来得到反馈,而这可能需要很长的时间。现有方法可分为手工调和自动调整两大类。

针对以上四个问题,本文从下面四个部分进行了回答:参数选择(knob selection),特征选择(feature selection),调参方法(tuning methods)和迁移方法(transfer techniques),主要流程如图2所示。


图2 旋钮调优流程

2 参数选择(knob selection)

(1)参数介绍

数据库系统中有成千上百的参数,根据其作用的模块不同可将其分为七类:访问控制旋钮(Access Control,AC),查询优化器(Query Optimizer,QP),查询执行(Query Executor,QE),后台进程(Background Process,BP),CPU资源,内存资源和磁盘资源管理,如下图所示。


图3 参数分类

其中,访问控制旋钮 主要影响并发访问和数据库事务,通过平衡衡性能和吞吐量影响数据库性能。查询优化器 中通过选择顺序扫描或索引扫描,贪心算法或遗传算法来影响查询计划的生成。查询执行 旨在配置物理执行机制和锁机制。后台进程 如日志记录,审计和复制等进程,这些任务对于保证数据库实例的可靠性至关重要。CPU资源 管理控制分配给每个用户连接的内核资源,从而保证数据库的稳定性,提高查询并发度。内存资源 管理包括内存分配和内存参数设置。磁盘资源管理指定磁盘设置的配置,以充分利用I/O带宽和磁盘空间来完成数据库中的各种任务,例如用户连接和临时文件处理。

(2)参数选择

参数成千上百,但可能只有其中部分的参数对系统的性能起到关键作用,并且参数之间相互影响,如何确定关键参数?

一是依赖人工经验,通过配置手册或在实践中积累的经验,如对于内存密集型的查询,内存大小极大影响系统的性能,对于IO密集型的查询,IO最大并发数对系统性能更为重要,但这些简单规则存在一定的局限性,单纯依靠DBA的经验也可能会忽略对系统性能有潜在影响的旋钮。

二是通过排序,通过旋钮调整后对数据库系统的性能影响进行排序,并选择影响较大的旋钮。在基于排序的方法中,主要分为两步:第一步 收集工作负载上的一些配置及其相关性能。假设系统中100个旋钮,每个旋钮有2种配置,那么总共的样本数量将达到 <math xmlns="http://www.w3.org/1998/Math/MathML"> 2 100 2^{100} </math>2100种,在巨大的样本数量中,可通过随机采样、拉丁超方体[2]、HUNTER[3]三种方法。第二步对搜集到的样本进行排序,排序方法有多种,如SARD[4]中使用的统计方法,OtterTune[5]中使用的Lasso方法,CART[6]中使用的随机深林,iTune[7]中使用的敏感性分析。基于排序的方法一定程度上减少了人工经验,能够找到具有显著影响的旋钮,但存在一些缺陷,采样的方法导致错过一些重要的旋钮。

2 特征选择(feature selection)

特征选择是选择合适的能够反映数据库状执行状态的关键特征,工作负载、数据库状态、硬件环境都是反映数据库性能的特征。本节首先讨论两大类特征:负载特征和数据库运行时状态,然后然后讨论现有调优工作中常用的特征选择方法。

(1)调节特征

工作负载 :对工作负载进行表征以定位问题组件并优化相应旋钮至关重要。工作负载的类型可分为三类:查询特征、并发特征和数据特征。查询特征 中包括使用的查询算子、关键字、查询结构、 查询代价、读写比率。并发特征 包括并行级别和读写比率,它们隐式地表明访问冲突的级别,并要求调整访问控制旋钮。数据特征包括基表和中间表的大小以及数据统计,如元组选择性,这些对确定资源相关的旋钮至关重要。

数据库运行时状态 :数据库系统中可以使用以下度量来评价系统执行状态:调优目标指标,数据库运行指标,表格统计。调优目标指标 反映数据库性能(如延迟和吞吐量)或资源使用情况(如I / O和内存使用)。数据库运行指标 包括数据库状态指标和查询状态指标。表格统计用来反映数据分布,例如列项的宽度和不同的值比率,可以利用这些度量来描述访问数据的规模,这对于如资源分配这样的旋钮是至关重要的。

(2)特征选择方法

如上所示,有各种各样的工作负载和无数的数据库度量。一些特征选择方法试图从工作负载和运行时度量中提取有用的特征来表征数据库状态。在现有的工作中,主要有两种方法:工作负载编码 ,如从查询计划中提取代价/算子特征;数据库度量选择 ,如使用数据库运行时度量。如下图所示。
图4 特征选择方法

3 调优方法(tuning methods)

调优问题即怎么调,手动调或自动调。手动调整依赖人工经验,是一个耗时耗力的工作。现有的自动调整方法可分为四类:启发式调优方,基于贝叶斯优化的调优方法,基于深度学习的调优方法和基于强化学习的调优方法。下面对这四种方法进行介绍。

3.1 启发式的调参方法

基于启发式的方法可分为基于规则的方法和基于搜索的方法。基于规则的方法 基于经验构造一些规则,并利用这些规则来指导调优过程,其优点是简单、快速,但由于系统的复杂性很难找到最优配置。基于搜索的方法使用分层搜索方法来选择旋钮设置。将配置空间划分为若干个子空间,用这个配置子空间运行给定的工作负载,选择最佳的子空间,然后搜索这个选择的子空间的相邻空间来找到旋钮设置。

下面介绍两种基于搜索的方法:

(1)多种搜索方法的组合

OpenTuner[8] 是一个自动配置调优框架,使用了多种搜索方法来寻找性能良好的配置。首先,选取一些初始配置样本,然后使用用户自定义的度量函数来评估这些配置样本的质量。接下来,基于估计的性能,使用了几种配置搜索方法,如多臂赌博机和粒子群优化,其中每种搜索方法都可以推荐下一个搜索实例。根据每个方法推荐的搜索样本的质量,可以评估每个搜索方法的质量,并为性能更好的搜索方法分配更多的推荐样本的机会。

(2)抽样优化方法

BestConfig[9]使用了一种采样优化的方法来寻找旋钮配置。首先采用分而治之抽样方法选择配置样本,通过运行工作负载或用户定义的测量值对配置样本进行评估。然后,使用递归边界和搜索算法通过搜索这些样本的附近配置来优化这些样本。BestConfig在给定的资源限制内重复调用上述步骤,找到合适的参数配置。

与基于规则的方法相比,基于搜索的调优方法不依赖经验,能够适应不同的数据库系统,但也存在一些缺陷,一是采样和搜索过程非常耗时,二是采样过程可能会忽略一些搜索空间,从而遗漏更好的配置设置。

3.2 基于贝叶斯优化的调优方法

(1)贝叶斯优化的基本流程

贝叶斯优化 旨在通过对性能函数进行建模来寻找最优配置,具体可分为两个步骤:建立代理模型构造采集函数

建立代理模型:常用的代理模型有高斯过程和随机森林。 高斯过程根据已有的点来预测未知的点,同时给出预测值的不确定性,但其无法较好处理参数为离散的情况。随机深林可处理连续和离散的情况,在较大的搜索空间中性能更优,但无法有效地探索未接触的空间。

构造采集函数:根据代理模型得到新的参数点的函数值和不确定性,然后基于这些预测,设计一个采集函数。采集函数的设计基于探索(exploration) 和开发(exploitation)之间的平衡。探索是选择不确定性较大的点,希望发现新的好点。开发是选择那些预计目标函数值较好的点,利用已有信息改进最优解。

基于采集函数选择下一个点后,获得该点的真实值,将其加入已有数据集中,然后用这些值更新代理模型。重复以上两个步骤,逐步缩小参数空间,找到最优参数值。

(2)基于贝叶斯优化的调参模型

使用贝叶斯方法来构建调参模型的过程中,除了代理模型和采样函数的设计外,还需要进一步考虑模型初始化数据库特征选择。

模型初始化:不仅会影响收敛速度,而且会影响所选旋钮设置的质量。在高维空间中,可通过拉丁超立方体(LHS)采样获得比随机采样更稳定的初始样本。此外,若有历史样本,可通过迁移学习的方法从历史样本中挖掘有用特征,从而挑选出高质量的初始样本。

数据库特征选择: 为了对旋钮-性能关系进行建模,一种直接的方法是使用旋钮设置作为输入数据。然而,在新的调优场景中,这种关系和调优需求可能会发生变化。因此,考虑了一些额外的数据库特征,如旋钮设置样本、工作负载/运行特征和底层系统特征。

基于贝叶斯优化的调优方法流程如下图所示:


图5 贝叶斯优化流程

(3)优缺点

基于贝叶斯的调优方法通常优于启发式方法,能够找到高质量的旋钮设置,但同样无法扩展到更大的配置空间上,从而陷入次优。

3.3 基于深度学习的调参方法

深度学习的方法也被提出提高调优性能。[10]使用了一个简单的前馈神经网络,包括两层的全连接层,每层64个神经元,使用ReLU激活函数,并在网络中加入了高斯噪声,从而使得模型去探索未知的配置。相比于贝叶斯的方法,基于深度学习的方法能有效地估计调优性能,不需要重复运行工作负载来评估所选的设置,能够有效减少调优时间,但基于深度学习的方法需要大量的训练样本来训练模型。

3.4 基于强化学习的调参方法

为了提高在没有大量历史数据的情况下大配置空间的性能,基于强化学习( RL )的方法被提出。强化学习通过trial-and-error的策略探索有希望的配置空间。

在强化学习中,有六个模块:行为(actions), 奖赏(rewards), 智能体(agent), 环境(environment), 策略(policy)和状态(state),其本质是通过环境和智能体之间的交互来学习调整策略。基于RL的方法将旋钮调优问题映射为强化学习框架中的六个模块,即以数据库为环境,以运行时度量为状态,以调优模型为智能体,以旋钮调优为行为,以调优后的性能变化为奖赏,以调优评估模型如深度学习为策略。在学习过程中,智能体根据状态特征推荐调优动作,并通过奖励更新调优策略,以优化数据库性能。下表为集中基于强化学习的调优模型。


图6 强化学习方法

然而,基于强化学习的调优成本远高于贝叶斯方法,在[10],强化学习需要200次迭代以上,才能取得比贝叶斯方法更优的配置。

4 迁移学习

在现实场景中,工作负载动态变化,基于特定工作负载得到的配置参数很难适应于多种复杂的环境,迁移学习被提出来提高调优效率。迁移学习的思想是利用历史信息来指导新的调优过程。现有的迁移学习方法可分为三类:工作负载映射,工作负载嵌入和模型集成。

工作负载映射:将工作负载特征向量化。在仓库中存储历史特征向量,在构建新的调优模型时,将新的工作负载映射为特征,通过计算特征向量之间的相似度(如欧式距离等)来匹配相似的工作负载,取其配置参数作为新的初始样本。但在这种方法中仍存在两个缺点:一是会遇到没有相似历史特征的情况,那模型依然要从头学起,二是系统仍需要运行工作负载来得到实际的性能特征。

工作负载嵌入:与工作负载映射不同的是,工作负载嵌入通过一个模型在大量的样本上学习了工作负载到数据库性能的高维映射特征,因此可以不用执行从而节省大量的成本,但缺点是模型需要大量的样本进行学习。

模型集成:在典型的工作负载上准备好一组训练好的调优模型,通过对这些模型的加权来应对新的工作负载,可分为静态权重学习和动态权重学习两种。静态权重学习中,通过工作负载的相似度来确定权重。动态权重学习中,在获得足够多的新工作负载观测值后,根据基模型对新工作负载的预测精度为每个基模型分配权重。

5 参考文献

[1]Automatic Database Knob Tuning: A Survey

[2]K. Kanellis, R. Alagappan, and S. Venkataraman. Too many knobs to tune? towards faster database tuning by pre-selecting important knobs. In HotStorage, 2020.

[3]B. Cai, Y. Liu, and et al. HUNTER: an online cloud database hybrid tuning system for personalized requirements. In SIGMOD, 2022.

[4]B. K. Debnath, D. J. Lilja, and et al. Sard: A statistical approach for ranking database tuning parameters. In ICDE Workshop, 2008.

[5]D. Van Aken and et al. Automatic database management system tuning through large-scale machine learning. In SIGMOD, 2017.

[6]B. Cai, Y. Liu, and et al. HUNTER: an online cloud database hybrid tuning system for personalized requirements. In SIGMOD, 2022.

[7]S. Duan, V. Thummala, and S. Babu. Tuning database configuration parameters with ituned. VLDB, 2(1):1246--1257, 2009.

[8]J. Ansel, S. Kamil, K. Veeramachaneni, and et al. Opentuner: An extensible framework for program autotuning. In Parallel architectures and compilation, 2014

[9]Y. Zhu and et al. Bestconfig: tapping the performance potential of systems via automatic configuration tuning. In SoCCer, 2017.

[10]D. Van Aken, D. Yang, and et al. An inquiry into machine learning-based automatic configuration tuning services on realworld database management systems. Proc. VLDB Endow., 2021.

相关推荐
V_fanglue370514 分钟前
qmt量化交易策略小白学习笔记第67期【qmt编程之获取ETF申赎清单】
大数据·前端·数据库·笔记·python·学习·区块链
西柚小萌新1 小时前
三.python入门语法1
服务器·数据库·c#
好看资源平台2 小时前
Spring 全家桶使用教程 —— 后端开发从入门到精通
java·数据库·spring
Y_3_72 小时前
Redis 中 String 字符串类型详解
linux·数据库·redis·缓存·bootstrap
gorgor在码农3 小时前
Mysql 架构
数据库·mysql·架构
@月落3 小时前
获取douyin商品详情:API接口的力量
java·前端·数据库
program-learner3 小时前
日志系统扩展一:日志落地数据库:MySQL、SQLite3
数据库·mysql·sqlite·项目·日志系统
dbln4 小时前
MySQL之基本查询(一)(insert || select)
数据库·mysql
java—大象4 小时前
基于Java+Jsp+SpringMVC漫威手办商城系统设计和实现
java·数据库·spring boot·python·课程设计
程序猿进阶4 小时前
定时任务上云改造方案
java·服务器·网络·数据库·性能优化·定时任务·上云