记一次故障分析
操作系统版本:red6.7
数据库版本:Oracle 12.2.0.1
故障现象:大量的enq: CT - CTWR process start/stop等待事件,数据库hang死
1、查找阻塞源头
从图中可以看出出现问题的时间点大概在2019-11-13 01:03:23之前。阻塞源头为会话:3057,对应的等待事件为:row cache lock
但是二节点的历史活动会话信息因节点hang住,没有保存下来,所以从dba_hist_active_sess_history的信息,不可靠。
因为二节点的历史活动信息没有保存下来,从数据库中无法查到最终阻塞者,上述结果最终阻塞者不准确。需要借助trace文件分析。
2、Trace文件分析
从amrdb2节点的trace文件分析来看2019-11-13 00:25:34就已经出现了问题,2019-11-13 08:52结束。被阻塞的会话的等待事件为:enq: CT - CTWR process start/stop。
会话ID:146(oracle的ctwr进程,负责oracle数据块变更的跟踪,可以加快增量备份速度),阻塞了大量会话。参考Oracle官方文档:CTWR blocking either DBWR, CKPT or LGWR and causing DB hang (Doc ID 2297251.1),当系统处于非常高的负载时,ctwr进程有可能会hang住,会阻塞像DBWR、CKPT、LGWRj进程的写操作,最终数据库实例hang住,在集群状态下,有可能导致整个集群hang住。
参考解决方法
根据MOS文档建议,修改_bct_buffer_allocation_size、_bct_buffer_allocation_max 调整到一个合适的值