现在的位置: 首页 > 综合 > 正文

hanganalyze诊断数据库hang的原因

2013年09月02日 ⁄ 综合 ⁄ 共 2469字 ⁄ 字号 评论关闭

环境:redhat 6.1+11.2.0.3RAC

实验:

节点一sessions:

SQL> select userenv('sid') from dual;

USERENV('SID')
--------------
            62

SQL> create table binbin(id number,name varchar2(20));

Table created.

SQL> insert into binbin values(1,'binbin');

1 row created.

SQL> commit;

Commit complete.

SQL>  update binbin set name='hang' where id=1;

1 row updated.
节点二sessions:

SQL> select userenv('sid') from dual;

USERENV('SID')
--------------
            69

 

SQL>  update binbin set name='hang' where id=1;

此时已经hang住。

 

节点一sessions 2做hanganlyze分析:

 

RAC环境hanganlyze分析命令如下:

SQL> oradebug setmypid
Statement processed.
SQL> oradebug setinst all
Statement processed.
SQL> oradebug -g def hanganalyze 3
Hang Analysis in /u01/app/oracle/diag/rdbms/dave/dave1/trace/dave1_diag_8273.trc

单实例环境hanganlyze分析命令如下:

oradebug hanganalyze 3                  -----等价于 ALTER SESSION SET EVENTS 'immediate trace name HANGANALYZE level 3';

 

查看trace文件

more   /u01/app/oracle/diag/rdbms/dave/dave1/trace/dave1_diag_8273.trc

Extra information that will be dumped at higher levels:
[level  4] :   1 node dumps -- [LEAF] [LEAF_NW]
[level  5] :  13 node dumps -- [NO_WAIT] [INVOL_WT] [SINGLE_NODE] [NLEAF] [SINGLE_NODE_NW]

State of ALL nodes
([nodenum]/cnode/sid/sess_srno/session/ospid/state/[adjlist]):
[1]/1/2/1/0x91048db8/8261/SINGLE_NODE_NW/
[10]/1/11/1/0x91ff9fa8/8283/SINGLE_NODE_NW/
[11]/1/12/1/0x917fbcf0/8285/SINGLE_NODE_NW/
[26]/1/27/1/0x917cf218/8332/SINGLE_NODE_NW/
[31]/1/32/5/0x917c03d0/8384/SINGLE_NODE_NW/
[34]/1/35/7/0x917b74d8/9573/SINGLE_NODE_NW/
[50]/1/51/15/0x91787a58/10085/SINGLE_NODE_NW/
[61]/1/62/191/0x91766e20/20465/LEAF/
[72]/1/73/117/0x917461e8/20861/SINGLE_NODE/
[256]/2/10/1/0x91ffcf50/7872/SINGLE_NODE_NW/
[257]/2/11/1/0x91ff9fa8/7876/SINGLE_NODE_NW/
[258]/2/12/1/0x917fbcf0/7878/SINGLE_NODE_NW/
[303]/2/57/21/0x91775c68/13052/SINGLE_NODE/
[315]/2/69/15/0x91752088/13344/NLEAF/[61]

 

从上面trace可以看出nodenum为61,session id为62的阻塞了nodenum 为315 session id为69的会话。

[nodenum]/cnode/sid/sess_srno/session/ospid/state/[adjlist] 解释如下:

nodenum:定义每个session的序列号
cnode是Node Id

sid: session的sid
sess_srno: session的Serial#
ospid: OS的进程ID
state: node的状态
adjlist: 表示blocker node
IN_HANG:这表示该node处于死锁状态,通常还有其他node(blocker)也处于该状态
LEAF/LEAF_NW:该node通常是阻塞者,LEAF说明该NODE没有等待其他资源,而LEAF_NW则可能是没有等待其他资源或者是在使用CPU
NLEAF:通常可以看作这些会话是被阻塞的资源.发生这种情况一般说明数据库发生性能问题而不是数据库hang ,adjlist 可以看做是阻塞者。
IGN/IGN_DMP:这类会话通常被认为是空闲会话,除非其adjlist列里存在node。如果是非空闲会话则说明其adjlist里的node正在等待其他node释放资源。
SINGLE_NODE/SINGLE_NODE_NW:近似于空闲会话.

 

[oracle@rac1 ~]$ kill -9 20465 --kill掉阻塞着

节点二session:

SQL> select userenv('sid') from dual;

USERENV('SID')
--------------
            69

SQL>  update bnbin set name='hang' where id=1;

 

1 row updated.

 

抱歉!评论已关闭.