ITPub博客

首页 > 数据库 > Oracle > Oracle RAC的排障案例一则

Oracle RAC的排障案例一则

原创 Oracle 作者:a960549548 时间:2024-05-16 10:57:43 0 删除 编辑

背景概述

该故障数据库是某银行的一套运行在一套3节点RAC环境上的Oracle数据库,故障现象为在凌晨的时间段, 数据库一节点频繁地因为LMS进程超时而被实例级别KILL,当时获取了最近一次重启的日志分析,并结合

当前数据库的一些现有问题进行分析,给出具体的故障结论和处理建议。


故障一节点alert日志:

从以上信息看,数据库在正常运行过程中,突然因LMS0进程长时间无法得到响应被LMHB进程监控到后,LMHB进程对实例进行了KILL。


故障一节点的LMS0进程日志

故障前,LMS进程日志显示有发生部分的的DRM数据freeze,虽然整体操作都成功了,但还是会一定程度上加剧gc的繁忙,并且一定程度上影响到LMS进程的响应。


故障节点前的AWR报告分析


从故障前的时间点看,整体的CPU使用率较低,不过和之前想的一样,数据库存在一定的DRM数据freeze,整体的操作是成功的,相对来说存在一定的延迟。DRM在一定程度上加剧了GC的繁忙,以及在一定程度上影响了LMS进程的响应,导致了实例的kill。


故障节点OSWatch中CPU资源分析

由于故障时间点的OSWatch日志已经被覆盖,考虑到银行业务逻辑相对简单,不存在复杂多变的可能,故障时间节点后一天凌晨2点左右的日志应该同样具有参考性,可以收集OSWatch日志并进行分析。

从OSWatch上看,故障时间点的CPU并没有压力,所以可以排除CPU部分的可能。


故障节点OSWatch中内存资源分析

同样的,在故障节点的osw内存收集的日志中,内存还是较为空闲的。


故障节点OSWatch中IO资源分析

可以看到,在故障节点,本地盘的写IO非常厉害(每秒140M写入),而存储盘的读IO非常严重(每秒450M的读)而结合之前内存部分的分析,数据库并没有严重的交换产生,所以我们可以排除本地磁盘的写IO是交换引起的,考虑读写同时发生,结合crontab中的备份检查,可以确定,故障时间点应该是在做备份,从存储读出,写入到本地文件夹的备份。


故障节点OSWatch中网络资源分析

由于LMS涉及集群网络层的心跳服务,同样需要排查节点间心跳网络是否正常。

心跳网络的失败率较少,一般该指标超过1000并且存在严重的抖动,才能说明心跳网络存在不稳定性,对比故障恢复后的心跳网络发现没有存在抖动的情况,说明心跳网络正常。


结合当前的日志分析结论,初步判定在故障期间,主机四大资源中,IO资源在故障时间点,基本耗尽,虽然当前的OSWatch

并不是故障时间点的日志,但是依旧存在很大的参考性。怀疑在故障时间,LMS0进程因长时间得不到IO层的响应而导致进程

超时,进一步导致实例层面的KILL。


根据以上故障结论,当时给出如下的建议:

1. 结合跑批运行时间,结合3套数据库的备份时间点,错开运行备份

2. 不要将备份放在本地磁盘上,或者错开时间将备份放在不同的实例主机上,更或者直接备份到远端。

3. 如果有条件实现第二点,在优化备份的基础上,为了降低存储的读,可以在备份的时候进行适当的备份限速。

4. 从故障看,DRM也在一定程度造成了GC的繁忙,并且从目前的情况看DRM BUG较多,有条件的话可以考虑关闭该特性。

事后客户按照如上建议做了整改,没有再出现过二节点实例被kill的情况了。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70013625/viewspace-3015595/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 表空间类常用SQL
请登录后发表评论 登录
全部评论
Oracle ACE,MySQL 8.0 OCP,PMP,拥有OceanBase OBCP,TiDB PCTP,GoldenDB GDCP等多项认证,ITPUB认证专家,微信公众号:DBA之友。

注册时间:2022-02-08

  • 博文量
    132
  • 访问量
    171523