5
点赞
0
评论
0
转载
入驻

TKDE 2025 | OpDiag:数据库性能异常的算子级诊断

TKDE(IEEE Transactions on Knowledge and Data Engineering)是数据库与数据科学领域影响力最高的学术期刊之一,也是CCF推荐的A类学术期刊之一。PKU-DAIR实验室论文《OpDiag: Unveiling Database Performance Anomalies through Query Operator Attribution》被TKDE录用。

OpDiag: Unveiling Database Performance Anomalies through Query Operator Attribution

作者:Shiyue Huang, Ziwei Wang, Yinjun Wu, Yaofeng Tu, Jiankai Wang, Bin Cui

代码链接:https://github.com/hjhhsy120/opdiag

 

一、问题背景与动机

在现代数据库应用中,性能异常是影响系统运行效率与稳定性的重要因素,通常涉及复杂的诊断与修复过程,需要大量的人力开销。现有的自动诊断工具,例如DBSherlock [1]、ISQUAD [2]等,大多只能定位异常性能指标,判断异常类型,而无法为异常修复提供细节指导。2023年的研究工作BALANCE [3]具有定位异常查询的功能,但仍然无法提供更细粒度的诊断信息。

以索引缺失异常为例,DBSherlock的诊断报告仅包含异常指标与异常类型,数据库管理员(DBA)需要进行查询事务和数据库表的排查,才能确定哪个列需要添加索引。BALANCE能够定位异常查询,但是对于复杂查询,DBA仍然需要排查其涉及的表列,带来一定的人力开销。理想的诊断报告应直接指出哪个表的哪个列缺少了索引,这样DBA可以直接添加索引进行修复,避免繁琐的排查与试错过程。

经观察,性能异常修复所需的细粒度信息通常与查询算子相绑定。例如,缺失的索引与相关表列上的scan算子是绑定的。因此,我们考虑设计数据库性能异常的算子级诊断方案,为后续修复提供直接指导,从而减少人力开销,提高运维效率。

二、方法

1. 框架流程

我们提出的算子级诊断方案OpDiag框架如图1所示。该框架分为离线训练与在线诊断两部分。

离线训练阶段,在数据库上运行benchmark,采集性能指标与查询计划信息,训练query encoder、aggregator和classifier模型。

在线诊断阶段,data collector持续从系统中采集性能指标,输入classifier模型判断是否发生异常。一旦发生异常,data collector立即采集查询计划信息,开始诊断流程,包括性能指标重要度、可疑查询、可疑算子的定位。最后,输出诊断报告,为后续修复提供指导。

图1. OpDiag框架

2. 细粒度建模

OpDiag针对查询算子与性能异常之间的关系,进行了细粒度建模。

首先,query encoder以查询计划为输入,使用Tree-CNN模型[4]进行编码,输出单个查询的编码向量。Tree-CNN的正向计算过程如图2所示,其主要优势在于,在保留树结构信息的同时,不会受到树深的过度影响。

其次,aggregator以多个并发查询的编码向量为输入,使用DNN进行聚合,输出系统性能指标的预测值。在训练过程中,query encoder与aggregator作为一个整体进行训练,feature为查询算子特征,label为性能指标。

最后,classifier以性能指标为输入,使用随机森林模型,判断异常是否发生。我们对每个异常使用一个二分类器,以避免互相干扰。训练时,classifier以真实性能指标为feature,而不是前面的预测值,这样可以引入更多监督信号,提高准确率。

由此,OpDiag实现了查询算子、查询、性能指标、异常类型判断的多层次细粒度建模,为后续的归因方法奠定了基础。

图2. Tree-CNN模型

3. 细粒度归因

在线诊断过程中,OpDiag采用模型解释算法,对现场数据与模型进行细粒度归因,以判断模型的哪部分输入对模型输出的影响最大,从而进行异常根因的定位。其流程如图3所示。

首先,OpDiag对classifier的树模型进行解释,获得性能指标重要度。

其次,将aggregator输出的性能指标按重要度加权求和,然后使用梯度积分法[5],获得查询编码向量的重要度。根据重要度排名,即可定位可疑查询。

接着,选取可疑查询,对query encoder使用梯度积分法进行模型解释,获得算子重要度,从而定位可疑算子。

最后,综合各步骤的结果,输出完整的诊断报告,其中包含异常类型、异常性能指标、可疑查询、可疑算子信息,可为异常修复提供直接指导。

图3. 细粒度归因流程

三、实验结果

我们选取了三种常见性能异常进行评测,它们分别是索引缺失、表膨胀、锁等待。在索引缺失与表膨胀的复现中,我们不仅注入了缺失索引表上的查询,还注入了同等规模的正常表上的查询作为对照。若对照组的可疑度排名高于目标异常查询,则视为诊断错误。

查询级诊断结果如表1所示。OpDiag能在Top-2查询中准确检出所有案例,比现有工作BALANCE [3]的准确率更高。表中之所以有较多的100%,是因为我们复现异常时注入的查询相对于背景负载较为突出,更容易被定位到。

表1. 查询级诊断结果

算子级诊断方面,OpDiag同样能在Top-2查询中准确检出所有案例。图4展示了一个索引缺失案例的诊断报告。其中排名第一的算子为append,表示两表查询结果的拼接,不影响修复过程的判断。排名第二的算子为缺索引表A上的scan算子,顺位高于正常表B上的scan算子,验证了结果的正确性。

图4. 诊断报告案例

除了上述实验外,我们还邀请了来自中兴通讯的6名专业DBA,选取了3个工业案例,评估了在有/无OpDiag辅助的条件下,进行诊断与修复的耗时。如表2所示,OpDiag可大幅节省异常处理时间。其中,案例3的算子级诊断之所以未节省时间,是因为该案例的修复涉及复杂的查询改写,导致异常算子信息无法提供帮助。

表2. 工业案例节省时间百分比

 

四、总结

在本研究中,我们提出了数据库性能异常的算子级诊断方案OpDiag。该方案通过细粒度建模与归因算法,实现了可疑查询与算子的定位,用于直接指导异常修复。实验表明,OpDiag的诊断准确率高,优于现有方法,有助于节省人工修复时间,从而提升现代数据库的运维效率。

 

参考文献:

[1] Dong Young Yoon, Ning Niu, Barzan Mozafari. DBSherlock: A Performance Diagnostic Tool for Transactional Databases. SIGMOD, 2016.

[2] Minghua Ma, Zheng Yin, Shenglin Zhang, Sheng Wang, Christopher Zheng, Xinhao Jiang, Hanwen Hu, Cheng Luo, Yilin Li, Nengjun Qiu, Feifei Li, Changcheng Chen, Dan Pei. Diagnosing Root Causes of Intermittent Slow Queries in Large-Scale Cloud Databases. VLDB, 2020.

[3] Chaoyu Chen, Hang Yu, Zhichao Lei, Jianguo Li, Shaokang Ren, Tingkai Zhang, Silin Hu, Jianchao Wang, Wenhui Shi. BALANCE: Bayesian Linear Attribution for Root Cause Localization. SIGMOD 2023.
[4] Ryan Marcus, Parimarjan Negi, Hongzi Mao, Chi Zhang, Mohammad Alizadeh, Tim Kraska, Olga Papaemmanouil, Nesime Tatbul. Neo: A Learned Query Optimizer. VLDB, 2019.

[5] Mukund Sundararajan, Ankur Taly, Qiqi Yan. Axiomatic Attribution for Deep Networks. ICML, 2017.

 

 

实验室简介

 

北京大学数据与智能实验室(Data And Intelligence Research Lab at Peking Univeristy,PKU-DAIR实验室)由北京大学计算机学院崔斌教授领导,长期从事数据库系统、大数据管理与分析、人工智能等领域的前沿研究,在理论和技术创新以及系统研发上取得多项成果,已在国际顶级学术会议和期刊发表学术论文200余篇,发布多个开源项目。课题组同学曾数十次获得包括CCF优博、ACM中国优博、北大优博、微软学者、苹果奖学金、谷歌奖学金等荣誉。PKU-DAIR实验室持续与工业界展开卓有成效的合作,与腾讯、阿里巴巴、苹果、微软、百度、快手、中兴通讯等多家知名企业开展项目合作和前沿探索,解决实际问题,进行科研成果的转化落地。

 


北京大学数据与智能实验室,PKU-DAIR,Peking University Data And Intelligence Research Lab,负责人为北京大学计算机学院崔斌教授。
返回顶部