研发在进行一个过程的调试,反馈该过程调试不定期卡死,点取消无反映,从新开一个测试窗口依然卡死,怀疑是数据库问题,请求诊断。
首先想进行问题重现,于是远程连接到数据库,新开一个窗口进行调试,执行研发的调试过程,如下
多次调试未重现问题现象,询问情况,研发人员告知其问题依旧,而且当前正处在卡死的情况中,怀疑是否会话在等待立即查看会话等待事件,如下
发现都是SQL*Net空闲等待,怀疑是否出现死锁,于是查看alert日志,未发现deadlock的错误信息,也可以排除死锁。
问题仍然没有定位,由于目前调试处于卡死的状态,想通过hang分析来进行问题,诊断,于是执行hanganalyze 5跟踪,得到日志如下:
*** 2014-09-09 16:31:10.052
*** SESSION ID:(49.34904) 2014-09-0916:31:10.052
*** CLIENT ID:() 2014-09-09 16:31:10.052
*** SERVICE NAME:(ydtest) 2014-09-0916:31:10.052
*** MODULE NAME:(sqlplus.exe) 2014-09-0916:31:10.052
*** ACTION NAME:() 2014-09-09 16:31:10.052
Processing Oradebug command 'hanganalyze 5'
*** 2014-09-09 16:31:10.052
===============================================================================
HANG ANALYSIS:
instances (db_name.oracle_sid): ydtest.ydtest
oradebug_node_dump_level: 5
analysis initiated by oradebug
===============================================================================
Chains most likely to have caused the hang:
<no chains found>
===============================================================================
No chains found.
===============================================================================
Extra information that will be dumped athigher levels:
可以看到,并未出现hang住现象,问题陷入僵局,目前只能怀疑是数据库bug情况,无意中询问研发人员调试的操作过程,发现他每次操作的时候都是开始很调试很流畅,然后点取消调试,再调试就卡死,而我这边同样操作未出现该问题,进一步咨询plsql dev版本,研发用的是8.2,而我用的是10版本,可能与版本有关系。
因此,通过本次分析,数据库不存在等待情况,那么出现卡死就有两种可能:
1.数据库BUG,目前实例为11.1.0.7,不是我们推荐的数据库版本;
2.PLSQL DEV操作步骤或版本有问题;
由于数据库BUG判断和升级比较复杂,因此先尝试用最简单的更换Plsql Dev工具的方式排除问题,采用最新的10版本工具,安装测试,经过研发人员的试用,目前为止未在出现卡死现象,因此暂时先用这种方式再观察。
得出结论,如果过程调试莫名卡死,在排除锁表、等待事件后,有可能是PLSQL dev工具的问题
deadlock(死锁):如果数据库发生死锁,会在alert日志中有错误信息。
hang分析:利用hanganalyze命令,生成日志分析数据库卡住原因。
过程调试卡死,在排查了业务逻辑、锁表、等待事件后,可能是工具的BUG引起。