8.2.3 X-Tuner的调优策略
总的来说,对数据库进行参数调优可以分为两大类,分别是离线参数调优和在线参数调优,X-Tuner同时支持上述两类调优模式。
(1) 离线参数调优是指在数据库脱离生产环境的基础上进行调优的,一般是在上线真实业务前进行压力测试,并通过压力测试的反馈结果进行参数调优。
(2) 在线参数调优是指不阻塞数据库的正常运行,在数据库运行中进行参数调优或推荐的过程。
具体来说,调优程序X-Tuner包含三种运行模式。
(1) recommend:获取当前正在运行的workload特征信息,根据上述特征信息生成参数推荐报告。报告当前数据库中不合理的参数配置和潜在风险等;输出当前正在运行的workload行为和特征;输出推荐的参数配置。该模式是秒级的,不涉及数据库的重启操作,其他模式可能需要反复重启数据库。
(2) train:通过用户提供的benchmark信息,迭代地进行参数修改和benchmark(一种用于测量硬件或软件性能的测试程序)执行过程,训练强化学习模型。通过反复的迭代过程,训练强化学习模型,以便用户在后面通过tune模式加载该模型进行调优。
(3) tune:使用优化算法进行数据库参数的调优,当前支持两大类算法,一种是深度强化学习,另一种是全局搜索算法(全局优化算法)。深度强化学习模式要求先运行train模式,生成训练后的调优模型,而使用全局搜索算法则不需要提前进行训练,可以直接进行搜索调优。如果在tune模式下,使用深度强化学习算法,要求必须有一个训练好的模型,且训练该模型时的参数与进行调优时的参数列表(包括max与min)必须一致。
无论是离线参数调优还是在线参数调优,X-Tuner都是支持的,他们的基本结构也是共用的。如图8-1所示,是X-Tuner各个模块的结构示意图以及交互形式。
图8-1 参数调优工具X-Tuner的逻辑结构图
如图8-1所示,X-Tuner可以大致分为DB侧、算法侧、主体逻辑模块以及benchmark,它的各个部分的功能说明如表8-1所示。
表8-1 X-Tuner的结构介绍
X-Tuner结构 | 说明 |
DB侧 | 通过DB_Agent模块对数据库实例进行抽象,通过该模块可以获取数据库内部的状态信息、当前数据库参数、以及设置数据库参数等。DB侧包括登录数据库环境使用的SSH连接 |
算法侧 | 用于调优的算法包,包括全局搜索算法(如贝叶斯优化、粒子群算法等)和深度强化学习(如DDPG) |
X-Tuner主体逻辑模块 | 通过Enviroment模块进行封装,每一个step就是一次调优过程。整个调优过程通过多个step进行迭代 |
benchmark | 由用户指定的benchmark性能测试脚本,用于运行benchmark作业,通过跑分结果反映数据库系统性能优劣 |
1. 离线参数调优流程概述
X-Tuner利用长期在openGauss上进行参数调优的先验规则,根据系统的workload、环境特征推荐初始参数调优范围,该范围便是待搜索的配置参数空间。利用算法(如强化学习、启发式算法等)在给定的参数空间上不断进行搜索,即可找到最优的参数配置。
常规评价调优效果好坏的方法是运行benchmark,包括TPC-C、TPC-H以及用户自定义的banchmark,用户只需要进行少量适配即可。离线参数调优的流程图如图8-2所示。
图8-2 离线参数调优过程的流程图
对于离线调优,用户通过benchmark模拟真实环境中的workload,使用调优工具X-Tuner根据不同参数在benchmark上的表现来判断什么参数能够取得最佳表现。需要注意的是,整个离线调优过程是迭代式的,即设置完一次参数后,执行一次benchmark用于检验本次设置的参数好坏。上述过程称之为一次调优过程,那么X-Tuner只需要多次执行上述过程,即可找到一个最佳的参数配置。X-Tuner可以根据上一个调优过程的反馈,决定下一次调优中参数的寻找方向,这个过程也是优化算法的探索过程。
细心的读者可能会发现,上述过程是需要有一个初始参数配置的,这个初始参数配置对于已经训练好的强化学习模型来说,会利用模型进行初始化。若是采用搜索算法,则根据先验规则进行初始化。
由于某些数据库参数需要重启后方可生效,因此离线参数调优过程也可能是需要频繁地重启数据库的。离线调优过程与DBA手动调优过程比较相似,都是通过观察-试探-再观察-再试探进行的,只不过这个试探过程不是基于DBA的人工经验,而是通过算法的分析进行的。该过程也是比价耗时的,主要耗在执行benchmark上。
对于一些场景,可以采用explain命令替代,这样就可以省掉了执行benchmark的时间,但是explain并不能直接反映参数对缓冲区、WAL等数据库系统内部模块的影响,因此可使用的场景是有限的。业内的一个比较前沿的方法,是通过AI的方法,预估数据库的性能表现,一般称之为性能评估模型(performance model),通过该模型,可以省去执行benchmark的时间,从而压缩调优时间。不过该方法主要停留在理论界,距离在普适场景上的应用尚有差距,目前也在openGauss的演进方向中。
X-Tuner目前支持的强化学习算法主要为DDPG,支持的搜索算法主要为粒子群算法(particle swarm optimization,PSO)与贝叶斯优化算法(bayesian optimization)。
2. 在线参数调优流程概述
X-Tuner采集操作系统的统计信息和workload特征,根据训练好的监督学习模型或先验规则,推荐给用户对应的参数修改建议。在线参数调优过程的流程图如图8-3所示。
图8-3 在线参数调优过程的流程图