基于人工智能方法的数据库智能诊断

软件学报ISSN 1000-9825, CODEN RUXUEW E-mail:************ Journal of Software,2021,32(3):845−858 [doi: 10.13328/jki.jos.006177] ©中国科学院软件研究所版权所有. Tel: +86-10-62562563
金连源,  李国良
(清华大学计算机科学与技术系,北京  100084)
通讯作者: 李国良,E-mail:***********************
摘要: 数据库是一种非常重要和基础的计算机系统软件,随着数据库在各行各业的广泛应用,越来越多的人开始关注数据库运行的稳定性.由于各种各样内部或是外部作用的影响,数据库在实际运行的过程中会出现性能异常,而这可能会带来巨大的经济损失.人们大多通过观察监控指标信息来进行数据库异常诊断,但是关于数据库监控指标有数百个,普通的数据库使用者根本无法提取出有价值的信息.一些传统的公司会聘用专业的人员管理数据库,而这种成本会是很多公司难以接受的.因此,如何用较低的成本完成对数据库的自动监控和诊断是具有挑战性的问题.现有的OLTP数据库自动异常诊断方法往往存在着监控信息收集成本过高、适用范围小抑或是稳定性较差等问题.提出了一种智能的数据库异常诊断框架AutoMonitor,提供了数据库异常监测、异常指标提取和根因分析这3个模块,这3个模块分别使用了基于LSTM 的时间序列异常诊断模型、Kolmogorov-Smirnov检验、和优化的K近邻算法.整个框架分成离线训练和在线诊断这两个阶段.将提出的系统部署在PostgreSQL数据库,通过实验表明该框架对于异常诊断具有较高的精确程度,并且不会对系统性能造成太大的影响.
关键词: OLTP型数据库;异常诊断;人工智能
中图法分类号: TP311
中文引用格式:金连源,李国良.基于人工智能方法的数据库智能诊断.软件学报,2021,32(3):845−858./ 1000-9825/6177.htm
英文引用格式: Jin LY, Li GL. AI-based database performance diagnosis. Ruan Jian Xue Bao/Journal of Software, 2021,32(3): 845−858 (in Chinese)./1000-9825/6177.htm太阳能跟踪控制器
AI-based Database Performance Diagnosis
JIN Lian-Yuan,  LI Guo-Liang
数模转换(Department of Computer Science and Technology, Tsinghua University, Beijing 100084, China)
Abstract: Database is a kind of important and fundamental computer system software. With the development of database application in all walks of life, a growing number of people begin to concern the stability of the database. Because of the numerous internal of external effect, performance anomaly may emerge when the Database running and it may cause huge economic loss. People usually diagnose database anomaly by analyzing monitoring metrics. However, there are hundreds of metrics in the system and ordinary database users are unable to extract valuable information from them. Some major companies employ DBA to manage the databases but the cost is unacceptable for many other companies. Achieving automatic database monitor and diagnose with low cost is a challenging problem. Current methods have many limitations, including high cost of metrics information collection, narrow range of application or poor stability. This study proposes an a
nomaly diagnose framework AutoMonitor which is deployed on the PostgreSQL database. The framework contains LSTM-based anomaly detection module and modified K nearest-neighbor algorithm-based root cause diagnose
∗基金项目: 国家自然科学基金(61925205, 61632016)
Foundation item: National Natural Science Foundation of China (61925205, 61632016)
本文由“支撑人工智能的数据管理与分析技术”专刊特约编辑陈雷教授、王宏志教授、童咏昕教授、高宏教授推荐.
收稿时间: 2020-07-19; 修改时间: 2020-09-03; 采用时间: 2020-11-06; jos在线出版时间: 2021-01-21
846 Journal of Software软件学报 V ol.32, No.3, March 2021电动雕刻刀
module. Framework consists of an offline training and an online diagnose stage. The evaluations on the datasets show that the proposed framework has high diagnose accuracy with minor overload to system performance.
Key words: OLTP database; anomaly diagnosis; artificial intelligence
IT运维,指的是和IT服务管理相关的人员及管理过程,IT运维可以让公司提供的服务保持良好的质量,并且使服务达到用户付款后的预期.运维在人类未来的生产生活中的作用会越来越重要.2017年,清华大学裴丹提出“预计到2020年,全球将有500亿到1 000亿的IT设备,这些设备会承载无数的服务,覆盖互联网、金融、物联网、智能制造、电信、电力网络、政府等等的生产生活的方方面面”(yq.aliyun/articles/272155).在运维发展的过程中,最先出现的是依靠手工的运维;后来,人们把重复的手工操作代码化,基于大量脚本的自动化运维就开始流行了起来;其后又出现了DevOps和智能运维[1].智能运维,指的是使用大数据、机器学习技术来支持IT运维.机器学习可以处理海量的监控数据并且提供强大的推断能力.目前已经有许多公司和研究机构使用智能运维技术在许多方向取得了非常显著的进展,包括云数据库服务质量分析[2]、磁盘故障的预测[3]、微服务故障的定位[4]等等.
数据库是各种企业常用的系统软件,根据所执行任务的不同,可以将数据库分为执行大量简单事务的OLTP型数据库、执行复杂分析任务OLAP型数据库和兼顾执行上述两种任务的TATP型数据库.作为一种传统的系统软件,近年来出现了许多利用人工智能技术优化数据库部件的工作[5],可以发现,人工智能技术赋能的数据库具有更加强大的综合能力,智能运维技术在数据库领域也有着广泛的应用场景.
本研究聚焦于智能运维中的OLTP环境数据库性能异常监测诊断,在数据库性能下降时发现问题并诊断问题发生的根因.该问题有如下几个难点.
•监控指标和数据库性能异常之间的对应关系比较复杂,一种根因所引发的异常往往会导致多个监控指标出现问题,而单个监控指标的异常可能由不同的根因所导致的.此外,系统中会存在数百个指标,因此,采用简单的规则来进行数据库异常诊断精确度不高;
•OLTP环境下的数据库执行的是大量简单的事务,如果监控指标数据成本较大,可能会使执行时间较短的事务变慢,带来数据库性能下降的问题;
•由于OLTP任务请求的不稳定性以及操作系统、数据库系统的复杂性,监控指标中会有许多噪音,在这类监控指标中提取有用信息难度较大.
下面是关于第一个难点的一个具体案例:当我们执行数据库备份操作的时候,我们观察到了很多指标均产
生了异常,其中包括了CPU、I/O、中断计数,数据库等待进程等等,如图1所示
.
(a) CPU异常(b) I/O异常(c) 数据库进程异常
Fig.1 Anomaly metrics triggered by database backup
图1  数据库备份引发的监控指标异常
同一个指标的异常可能是由不同的根因所造成的,我们以CPU统计指标举例,可以看到:在外部进程抢占CPU、数据库备份和数据库外部文件导入这3个根因下,CPU的指标均产生了异常.
金连源 等:基于人工智能方法的数据库智能诊断
水泥锥847
图2展示了在3种异常触发的时候,CPU 指标变化的示意图.这是因为以上3个行为均需要计算机提供较高的计算资源.通过可视化我们发现,其他很多的指标均存在着相似的性质.因此,我们很难从单个异常的指标去推定数据库性能异常问题的根因
.
聚四氟乙烯乳液
喷水壶
(a) CPU 抢占                          (b) 数据库备份                      (c) 数据库还原
Fig.2  CPU metrics under different anomaly cases
图2  不同异常下,CPU 监控指标
已有的数据库异常诊断方法并不完全适用于我们的问题,这些方法中有的过于依赖专家知识,需要依靠有经验DBA 设计模型[6],并且这些模型只适用于一种数据库,不具备迁移性;还有的需要通过修改数据库系统源代码的方式获取细粒度监控信息[7],虽然提高了诊断的精度,但是这样既增加了开销,也带来更大的系统维护成本.
针对以上的问题,本文作者提出了一种自动、轻量级的监控诊断框架AutoMonitor.通过模拟数据库故障分析挖掘数据库性能故障下的一系列监控指标所表现出来的特征,使用基于深度循环神经网络的模型完成对数据库性能异常的监控.在这里,循环神经网络能以较低的成本和较快的速度完成对时序数据进行建模,并捕捉不同监控指标之间的相关性,进而实现高质量的异常监测.针对监控指标的数据特点,提出了基于Kolmogorov- Smirnov 检验的异常指标提取算法.该方法利用异常时序数据统计分布的差异来判断是否为异常监控指标,模拟人眼判断异常的过程,并且有一定的鲁棒性.最后,我们使用优化的K 近邻算法挖掘了异常监控指标和异常根因之间的对应关系,实现了数据库异常根因诊断.相比于其他方法,我们这种基于特征距离比较的方法不仅利用了所有监控指标信息,而且还考虑到了不同监控指标的重要性,因而具有更高的诊断精度.
本文第1节是相关工作的介绍.第2节是论文总体研究方案的介绍.第3节是论文所使用到的算法的具体描述.第4节是关于实验结果展示和分析.第5节是对于本文的总结.
1  相关工作
国内外有许多关于系统性能诊断的研究工作,针对系统面向不同的任务,我们将这些工作分成面向OLTP 环境和面向OLAP 环境这两个大类上面.OLTP 环境下,单条SQL 比较简单,执行的时间也比较短.因此,面向OLTP 环境的自诊断方法考虑整体工作负载的性能问题.OLAP 环境下,SQL 语句比较复杂,因此诊断时主要考虑单条SQL 语句的执行效率问题.
根据自诊断方法的不同,我们可以将自诊断方法分成基于专家结构模型的和基于机器学习的方法:前者利用专家知识构建的结构模型、决策树模型或者知识库进行诊断,后者则是利用历史运行数据结合已经标注的数据进行诊断.在有些文献中,这两种方法都会使用.
1.1  面向OLTP 环境
Yoon 等人[8]提出了数据库性能辅助诊断框架DBSherlock,该框架可以监控数据库运行期间的若干运行指标,当出现性能问题的时候,用户就可以划出性能异常的区域,让DBSherlock 出可能出现异常的指标.这些异常的指标具有较强的划分能力,即给定一个关于指标的断言(形如Attr >k ),使用这个断言可以把落在正常区域内的点和落在异常区域内的点分开.根据这些异常的指标,用户就可以出问题发生的原因.DBSherlock 可以将用
848 Journal of Software软件学报 V ol.32, No.3, March 2021
户的反馈整合成因果模型,因果模型的原因是数据库性能问题的根因,结果是一些关于异常指标的断言,这些模型会用到未来的推断里去.DBSherlock还在语义层面对因果模型进行合并,实验表明,这种方法大大提高了模型的诊断能力.
Benoit等人[6]提出了数据库性能自动诊断框架,和之前工作不同的是,该框架不仅可以对数据库性能问题进行诊断,还将诊断和调优这两个部分利用决策树的模型统一在一起,决策树的非叶节点是条件判断,而决策树的叶节点是需要调优的资源.对于一次关于数据库的诊断,系统会根据数据库当前的状态从根节点出发,根据非叶节点的条件选择子节点进行访问.系统重复以上的步骤,直至到达叶节点,叶节点的资源即是我们需要调优的资源.此外,框架对于数据库的负载和资源分别进行了建模,利用数据库的结构信息提升了准确性,作者还会使用不同资源配置下数据库运行的性能结果调优决策树.不过,该决策树模型的模型需要依赖特定的数据库文档以及数据库专家的领域知识,因此通用性不是很强.
Belknap等人在文献[7]中介绍了Oracle中SQL诊断工具Automatic Database Diagnostic Monitor(ADDM),在这项工作中,作者引入了数据库性能的衡量通货“数据库时间(database time)”,即数据库各个资源模块、数据库语句执行的各个阶段的运行时间,并且在这个基础上建立了图模型DBTime graph,通过对图的搜索,我们就可以定位问题.针对统计信息收集成本开销过大的问题,文献里提出一种基于采样的方法(active session history),即每隔一段时间观察用户的行为,Database Ti
me大的模块更加容易被采样到,诊断系统也会相应地重点分析.
Ma等人[9]针对OLTP数据库中间歇性的慢查询,提出了诊断框架iSQUAD,包含了异常抽取、相关性清楚、基于类型的模式集成聚类以及贝叶斯样例模型这4个部分.作者将该方法应用于阿里云数据库的实际数据中,取得了较好的实验效果.
1.2  面向OLAP环境
Borisov等人[10]提出了诊断工具DIADS,它适用在以SAN为底层存储结构的DBMS上面,注释计划图(annotated plan graph)是文献[10]中主要用到的模型,该图分为Query Layer,Database Layer和SAN Layer:Query Layer的内容是数据库的查询计划(因为是OLAP场景,计划较为复杂),Database Layer则是数据库相关性能运行指标,SAN Layer则是存储的物理体系结构.通过将查询计划里的操作符和相关的物理、逻辑硬件资源通过图的方式联系在一起,就能在查询出现性能问题时,使用该模型结合历史数据进行诊断.当查询执行时间和预期不符的时候,系统会根据查询计划提取每一个操作符所消耗的时间,将异常的操作符使用机器学习算法提取出来,再根据注释计划图模型出异常的硬件资源完成诊断.
Kalmegh等人[11]提出了框架iQCAR,该框架适用于大数据分析处理系统Apache Spark上,主要的功能是分析一个查询在运行的时候受到系统中并发执行的查询的影响.该研究的主要贡献在于定性地分析
查询间资源抢占的影响,并且提供了多粒度的分析.该研究首先聚焦于不同的任务关于单个资源的抢占问题,作者在这里提出了阻塞时间(blocked time)这一个概念,即单个工作获取一个特定的资源时的等待时间;此外,作者还提出了资源获取时间惩罚(resource acquire time penalty)来衡量一个任务获取特定的资源的效率.在建立相关概念以后,作者定量地分析了一个查询在获取资源时,其他并发的查询对其阻塞造成的贡献.接着,作者构建了iQC-graph,这是一个层级结构的图模型,每一层代表着查询执行过程不同的粒度,根据该图分析查询不同执行过程的性能情况.
2  总体研究方案概览
为了实现对数据库运行状况进行监控和诊断,AutoMonitor需要实时地收集数据库执行任务时相关的统计信息,并分析这些数据的变化情况.我们设计的异常诊断系统总体框架如图3所示,设计的框架分为两个主要阶段:第1阶段是离线的数据分析,第2阶段是在线实时的异常监测和根因诊断.
(1) 关于离线的部分.
系统的主要任务是训练在线阶段所使用的模型,共有两部分训练数据.
•一部分是异常时间序列数据,这部分数据通过模拟数据库异常收集而来,它是高维的时序数据,每一维
金连源等:基于人工智能方法的数据库智能诊断849
对应一种监控指标的结果,它们被用来确定每一种根因触发的异常下监控指标的特征,系统使用Kolmogorov-Smirnov检验给出每一维指标的异常程度,挖掘有异常的监控指标,然后将这些异常指标和正常指标拼接在一起,生成维数固定的异常特征向量,该向量将用于优化的K近邻算法中.此外,对于每一种异常的诊断,我们需要确定对应的重要监控指标,每个监控指标的重要性由数值αi决定,越重要的指标,对应的αi越大.相比于普通K近邻算法直接使用欧几里得距离进行相似度的计算,优化的K近邻算法在相似度计算时会涉及αi,使得系统对于根因不同但是表现相似的异常具有更强的判别能力,αi 的具体计算方法将在第3.3节描述;
•另一部分是数据库正常运行状态下的数据,该部分数据的结构和异常数据相似,区别在于我们没有手动注入异常,它们被用以LSTM循环神经网络的训练,训练以后的模型对于正常监控时序数据具有较强的重构能力,即:将一段时序数据依次输入到模型,经过处理保存中间结果在一个隐状态里,模型再从该状态开始逐步重建还原输入的时序数据.系统的最终目标是让输入和输出的时序数据尽可能地相似.当异常时序数据进入模型时,由于正常和异常时序数据在结构上的差异,重构的结果会带来较大的误差,如此,系统便获得异常监测的能力.
(2) 关于在线的部分.
当用户执行工作负载的时候,系统将实时地监控信息输入到数据库中.模型实时从数据库读取这部分时间序列数据并进行异常监测,当监测异常值高于警报阈值(该阈值在离线阶段由历史异常数据和正常数据共同确定,目标是最大化诊断准确度)的时候,便认为此时出现了异常,然后启动根因分析模块进行诊断分析.系统先提取未知异常的异常特征向量,然后使用优化的K近邻算法将未知根因的异常特征向量和已知根因的异常特征向量进行相似度比较,从而让用户可以获取异常监控指标和该问题可能的根因.系统会将诊断的结果汇总成报告反馈给用户.
数据库异常诊断系统
离线数据分析
在线异常根因推断
Fig.3 Anomaly diagnosis system architecture
图3  异常诊断系统结构示意图
AutoMonitor系统收集的统计信息主要包含了两个部分,分别来自于操作系统和数据库系统,我们使用了不同的方法收集这两部分数据.
•出于统计信息的可获得性和数据库部署的实际性考虑,我们选定Linux作为研究的操作系统.Linux系统会自动维护系统运行的相关统计数据并存放在特定的目录下,系统使用开源工具dstat收集整合这个一部分的信息,其中的监控指标涉及到CPU、I/O、网络、中断等部件;
•PostgreSQL内置了多个统计信息视图,记录了数据库、数据表、索引和连接用户等模块的统计信息.

本文发布于:2024-09-22 20:16:22,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/243524.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据库   诊断   指标
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议