当数据库出现严重的性能问题hang的时候,我们非常需要通过systemstate dump来知道进程在做什么,在等待什么,谁是资源的持有者,阻塞源等等。在出现上述问题时,及时收集systemstate dump非常有助于问题原因的分析。在此我们分享一个近期的客户案例,供大家参考。
2019年11月17日下午15:30左右开始,前端应用出现普通用户连接不上数据库的情况,在数据库主机上使用普通用户登录时出现hang死状态,但使用system用户可以成功登录数据库。DB alert日志中出现大量ORA-12012自动执行对象作业出错,ORA-04021等待锁定对象时发生超时等报错,数据库CKPT进程超时400多分钟。
查看当前监听状态正常:

查看数据库活动会话情况:



注:其他类似信息已截断, 等待事件主要有library cache lock, reliable message, enq: HW –contention, 并行相关的等待, 无block_session信息。
做数据库hanganayly dump 进一步定位故障原因:
SQL> oradebug setmypid
SQL> oradebug unlimit
SQL> oradebug hanganalyze 3

上面堵塞链条,显示library cache lock, reliable message, enq: HW –contention,buffer busy waits, latch free 都是被堵塞的级联等待。