环境: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/racdg/racdg1/trace/racdg1_diag_8273.trc
单实例环境hanganlyze分析命令如下:
oradebug hanganalyze 3 -----等价于 ALTER SESSION SET EVENTS 'immediate trace name HANGANALYZE level 3';
查看trace文件
more /u01/app/oracle/diag/rdbms/racdg/racdg1/trace/racdg1_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.