<< 返回文章列表

智能诊断——瑕疵全记录,数据库毛刺问题的排查与解决

2022年7月30日
,
z
C
l
o
u
d
,
,
,
云和恩墨
22

日常数据库运维管理工作中,监控数据中往往会出现一些不正常的信号,如突然增高的 I/O 流量、短期内增大的时延等,这些信号称为“毛刺”。它们的出现可能会造成在线业务出现部分请求超时,或是服务质量的下降。有的毛刺消耗CPU,有的毛刺引起连接处理的阻塞,有的毛刺会使请求处理时间变长。有些毛刺问题凸显并且有规律可循,有些却杂乱无章。在没有影响到系统业务正常运行时,这类问题一般不会被特别关注,即便是精益求精的DBA想解决毛刺问题,但苦于问题持续时间太短,发现异常时,出现毛刺的时间点已经过去,且大多数毛刺问题无法稳定复现,所以对于毛刺根因的分析比较困难。再者,毛刺问题各式各样,无法用系统化调试的思想,从现象出发逐步推理、定位问题,通常DBA能做的就是看一下监控系统对应时间点的指标情况,而有些系统收集的信息并不全面,历史数据也保存的不够完整,导致排查过程困难重重。

今天我们来看看,数据库云管平台 zCloud 在实际应用中针对毛刺问题的表现怎么样?

最近,某用户环境,DBA在查看 zCloud 对数据库的监控数据时发现,其中一个数据库实例曾出现 IO 流量瞬时大幅上涨的情况(从每秒100MB上涨到每秒300MB以上),虽然数据库很快恢复正常,但DBA仍然带着疑问查看了该库的问题列表,随即发现问题列表中已经记录了“磁盘 IO 负载过高”的提示问题(如下图右侧)。点击问题查看详细内容,可以看到这个问题只持续了不到1分钟,问题详情给出了该实例“实例物理 IO 流量环比大幅增长”的问题描述,而且有两个数据库实例有此问题。

点击诊断详情,DBA进一步查看问题详情的诊断路径(如下图),智能诊断给出的引起磁盘 IO 负载过高的原因是“实例物理 IO 流量环比大幅增长--》SQL 语句直接路径读写 IO 流量过大--》SQL 语句等待直接路径数量过多”。
可以看到诊断过程还是非常清晰的,除了诊断出“SQL语句等待直接路径数量过多”问题外,还发现了其他的 USERIO TOPSQL,但进一步查看发现这不是引发这一问题的根因,另外并没有发现大量的数据导出和 RMAN 备份流量,且 IO 延时也在正常水平,可以确定“SQL语句等待直接路径数量过多”的根因分析更准确。进一步查看根因详情,很快判断出是突发大量 DIRECT PATH READ 情况引起了 IO 流量大幅上涨。Direct path read 这个功能初衷是避免大量全表扫描数据库污染 BUFFER CACHE 影响 OLTP 业务响应,但实际场景中大量并发的 direct path read 会大量占用磁盘 IO 资源,严重时会影响整个数据库性能,所以通常情况下白天业务期间不允许进程大量的并发 direct path read。

本次问题是一个定期统计数据程序的SQL语句引起,且相关表数据量每天都在大幅上涨,可以预期以后这个程序对数据库性能冲击会越来越大。后续通过定期清理的垃圾数据,大幅降低了这个SQL开销,从而消除了这个毛刺问题。

上述看似简单的问题分析,其实是借助智能诊断对历史事件的详细数据的记录和分析能力,在给出问题告警的同时,智能诊断已经根据当时的数据对根因做了一轮详细分析,形成了诊断树。这样,在后续DBA查看和判断这个问题时给予了很大的便利。

困扰DBA的毛刺问题,除了上述持续时间很短的瞬时毛刺,还有耗时毛刺,这类毛刺会直接影响系统的服务可用性,最直观的表现就是业务阻塞。例如下面这个例子:

某核心业务库上发现了严重的锁堵塞问题,通过 zCloud 检查,发现该问题持续了接近20分钟后恢复,查看根因推荐的是“DDL的SQL语句正在执行”。由此初步判断是当时有DDL运行引发了大量堵塞。

进一步查看诊断详情,通过诊断树可以发现,DDL语句是一个创建索引的语句,引发的堵塞类型主要是引发了大量的 Librarycachelock,所以某一时间段内请求处理受到阻塞。索引创建完成后堵塞问题恢复了。

上述两个案例,一个已经引起了业务问题,一个则并未引起业务问题甚至没有生成任何告警,无论哪一种都已经对系统稳定性、可用性造成了威胁。而解决毛刺问题,需要有一定技术深度和经验的高水平DBA进行根因分析,受限于系统对毛刺问题的记录与判断,很多时候因为缺乏关键信息记录只是临时解决,并未彻底解决,而且毛刺的问题类型各种各样,具体问题具体分析才能彻底消除隐患,所以DBA在解决这些毛刺时需要依赖运维软件发现这些问题和解决问题的能力。而使用 zCloud 对数据库的运维管理时,只要是系统发生过的事件无论是否引起系统异常或产生告警都会被详细记录,并且生成当时的诊断记录,便于DBA做事件的复盘和分析,甚至还会给出多种解决方案。zCloud 不仅仅对数据库软件做管理,监控数据更是以集群视角,从系统硬件到系统软件再到数据库软件,凭借多年的专家运维经验设置告警规则及模型,更加全面、精准的发现、记录和告警。因此,任何系统瑕疵都被记录、分析并给出优化建议,当需要对此类毛刺问题进行分析时,第一时间为DBA诊断提供详细数据支撑,不仅极大提升了运维效率,也使得毛刺问题无所遁形。

zCloud 数据库云管平台,身边的“数据库专家”

云和恩墨 zCloud 数据库云管平台,基于 WaaS(Wisdom as a Service,智慧即服务)理念打造知识库与智能诊断功能,将行业最佳实践和专家经验转化为平台能力,让高级“数据库专家”实时在线,有效保障数据库稳定高效运行。
WaaS 模型从数据到智慧,持续将专家经验代码化,为平台动态赋能:数据层面利用管理大数据,实现对数据库做精准画像,改变过去基于指标运维的不足;知识层面通过共建共享知识库,解决过去管理经验孤岛、样本不足的问题;智慧层面通过用户贡献个案、专家标注、机器学习三个来源生成知识点、案例、算法,实现经验代码化。

智能诊断, 精准定位问题根因

zCloud 智能诊断覆盖数据采集→问题感知→自动诊断→识别根因→故障自愈五个阶段。从数据采集开始,在不影响数据库稳定性的前提下,最大程度覆盖和优化采集指标,并通过一系列算法,过滤分级,收敛检测点,降低误报率等,破除浅层表象,同时进行事件关联,自动生成诊断关系树,层层深入,最终找到问题根因,并提出解决方案。

zCloud 知识库积累的最佳实践和专家经验为智能诊断动态赋能,持续提升平台的智能化诊断能力。