[SCIS 2022] 数据库性能优化综述【转载】
1488
2022-11-21
6
0
2
用微信扫描二维码

来源:北京大学数据与智能实验室

图片图片

关键词

Database Management System

Performance Optimization

Performance Prediction

Anomaly Diagnosis

Database Tuning

Survey

 

导 读

SCIENCE CHINA Information Sciences (SCIS)中文全称为中国科学信息科学,是中国科学院和国家自然科学基金委员会共同主办、《中国科学》杂志社出版的学术刊物,其2022影响因子7.275,主要发表信息科学领域的高质量学术论文。PKU-DAIR实验室研究成果《Survey on Performance Optimization for Database Systems》已被SCIENCE CHINA Information Sciences接收。近年来,性能优化作为数据库运维的重要环节,在工业界与学术界均受到广泛关注。该综述旨在梳理总结关于数据库性能优化的研究工作,以供相关领域的研究人员与工业界人士进行快速了解。该综述根据运维的不同环节,按照性能预测、异常诊断、调优这三个主题,分析了相关任务的目标与挑战,总结了现有工作的应对方案、优点与局限性,并阐述了未来有待进一步探索的方向。

 

论文链接:

https://www.sciengine.com/SCIS/doi/10.1007/s11432-021-3578-6

 

01 引言

随着现代数据库系统与业务日益复杂,性能优化已成为数据库领域的研究热点。作为服务级别协议(Service Level Agreement, SLA)的重要组成部分,数据库性能是用户所关心的重要指标,也是运维人员的重点优化对象。数据库性能的衡量指标主要包括事务或查询的吞吐量与延迟,部分场景还会考虑资源用量。本文仅关注以吞吐量与延迟作为主要优化目标的研究工作。在数据库系统中,影响性能的主要因素包括系统设计、配置、工作负载。其中,系统设计通常由开发人员考虑,本文则是从运维角度,关注配置与工作负载相关优化。相应主题包括:性能预测(Performance Prediction)、异常诊断(Anomaly Diagnosis)、调优(Tuning)。本文围绕这些主题,评述了具有代表性的研究工作,阐述了研究挑战与未来有待进一步探索的方向。

图片

图 1  数据库性能影响因素与研究主题的关联

 

02 数据集

数据集是性能优化实验的基础。大多数研究工作使用开源benchmark构建数据,其工作负载分为OLTP(事务型)与OLAP(分析型)两种。典型的OLTP benchmark包括TPC-C, TPC-E, YCSB, TATP, Smallbank等。典型的OLAP benchmark包括TPC-H, TPC-DS, JOB等。部分研究工作则使用来自真实业务的数据。这些数据往往更具可信度,但通常难以获取,因为它们容易涉及数据库用户隐私,而且数据采集与打标签的开销较大。

 

03 性能预测 Performance Prediction

数据库性能预测的目标是在给定的环境下,预测查询的执行时间(延迟)或吞吐量。与数据库优化器(Optimizer)内部的代价估计(Cost Estimation)有所不同,它往往是监控系统或自适应数据库系统(Self-driving Database System)的组成部分,以指导正常环境下的性能调优。随着机器学习技术的发展,许多研究工作用机器学习模型代替基于公式与规则的算法,在数据库环境相对固定的情形下,能够取得较好的效果。相关工作按预测对象可分为单查询、多查询两类。

图片

图 2  数据库性能预测研究工作汇总

(3-1)单查询

此类工作仅针对单一查询,不考虑并发执行的影响。我们选取了近年来采用机器学习算法的代表性工作进行评述。它们将执行计划以算子粒度编码为向量,训练机器学习模型用于预测。其中,编码的信息可包括来自数据库优化器的信息,如基数(Cardinality)、代价(Cost)等。

(3-2)多查询

此类工作以整个工作负载为输入,通常先进行聚类和采样,再输入模型进行预测。部分工作不仅考虑工作负载信息,还将环境信息加入模型输入,例如配置参数、硬件信息等,这有助于模型适应动态变化的环境。

 

04 异常诊断 Anomaly Diagnosis

数据库性能异常主要表现为吞吐量下降或较长的查询延迟。异常诊断的目标是定位异常根因,可作为异常环境下性能调优的指导。在不同研究工作中,诊断系统的输入、输出、支持的异常类型均有所不同。我们根据输入数据的不同,将其分为三类:

图片

图 3  数据库性能异常诊断研究工作汇总

 

(4-1)基于监控指标

此类方法的输入是操作系统和数据库的关键绩效指标(Key Performance Indicator, KPI),包括CPU、内存、I/O、网络等资源指标,以及读写行数等工作负载指标。其输出通常包含异常监控指标与推测的异常类型,通常能支持大多数常见的性能异常。

 

(4-2)基于日志

此类方法的输入是数据库的debug日志,通常以两份日志为输入,比较其系统行为的差异。若两份日志分别来自正常、异常环境,则其系统行为的差异可反映异常根因。此类方法的主要局限性在于记录debug日志的开销较大。

 

(4-3)基于时间

此类方法的输入是时间指标,通常仅限于诊断资源瓶颈与竞争,相关算法通常基于图结构的分析,以探索不同组件的资源开销。

 

05 调优

数据库调优旨在对性能影响因素进行调整,以提高吞吐量或降低延迟。相关的影响因素包括配置旋钮(Configuration Knobs)、索引(Indexes)、视图(View)、资源(Resource)、存储(Storage)、查询语句设计等。近年来,机器学习算法在该领域得到广泛应用,代表性方法包括强化学习(Reinforcement Learning)、贝叶斯优化(Bayesian Optimization)等。我们根据调优对象的不同,将相关工作分为以下六类:

图片

图 4  数据库性能调优研究工作汇总

 

(5-1)调参(Knob Tuning)

数据库系统内通常有上百个可供调节的旋钮(Knob),对性能和资源使用有着重要影响。局部最优的参数往往并非全局最优,不同参数之间存在相互影响,搜索空间大而复杂。常见调参技术包括基于规则搜索、贝叶斯优化、强化学习等。

 

(5-2)索引选择(Index Selection)

索引选择是指对给定的工作负载与存储限制,选择合适的列建立索引。该任务的主要挑战包括:(1)备选的索引很多,因为可以建立多列索引;(2)索引之间存在相互影响;(3)索引并非越多越好,例如增删改操作会有索引开销。传统研究工作通常以纯收益或单位空间收益为优化目标,基于贪心、迭代、线性规划等方法寻找最优解。近年来,强化学习也被应用于这一问题。也有研究工作从代价比较的角度,利用机器学习模型进行优化。

图片

图 5  索引选择研究工作细节汇总(属于调优方法之一)

 

(5-3)视图物化(View Materialization)

视图物化是指保存一些查询或子查询的结果,供其他查询使用。它可以通过减少重复操作来提升性能,但具有一定的存储和维护代价。传统方法主要有遗传爬山算法、整数线性规划等,近年来也有基于强化学习的方法被提出。

 

(5-4)弹性资源(Elastic Resource)

弹性资源主要通过增减设备节点数量、调整备份等方式进行性能优化。以增加设备节点为例,首先数据被重新分片并决定备份数,其次决定如何在各节点上分配这些数据分片,最后进行数据迁移。删除节点的过程也是类似的。据此,相关研究工作主要分为两类:一类关注资源与数据的分配,包括如何调整节点数、数据分片、备份等;另一类则关注如何动态迁移数据,以降低迁移过程中的性能损失。

 

(5-5)存储管理(Storage Management)

分布式存储管理也是性能优化的一种方式。一方面,这样的技术有利于弥补通用分布式框架(如Spark)的不足,例如垃圾回收、索引构建等。另一方面,它们可以为特定的数据和方法提供支持,例如轨迹数据上的K近邻算法等。

 

(5-6)SQL不良模式检测(SQL Antipattern Detection)

SQL不良模式(SQL Antipattern)包括不良的查询(Queries)和模式(Schema)。此类工作可协助数据库管理人员进行定位和改写。目前,相关工作主要依赖于人工制定的规则进行匹配检测。

 

06