使用oradebug dump hanganalyze 分析oracle hang系列二
背景
基于上文:使用oradebug dump hanganalyze分析oracle hang系列一,http://blog.itpub.net/9240380/viewspace-1823479/,继续熟悉TRACE FILE内容。
结论
1,DUMP FILE第三部分的构成
State of ALL nodes
([nodenum]/cnode/sid/sess_srno/session/ospid/state/[adjlist]):
[9]/1/10/1/0xdcba9740/10574/NLEAF/[31]
2,state列暂时共发现如下3个值
NLEAF
SINGLE_NODE
LEAF_NW
3,state列3个值的含义
NLEAF表明等待会话,而LEAF_NW表明持锁会话
SINGLE_NODE它不等待任何会话也不阻塞任何会话
而且如果state值为NLEAF,adjlist列会有值,这个值到底是什么含义呢?
4,如果state值为NLEAF,adjlist列会有值,这个值到底是什么含义呢?
我们随机挑出相关匹配记录,找出它们的规律,分析adjlist的含义,可见NLEAF后面的adjlist等于持锁会话sid+1,也就是说用adjlist-1就是持锁会话的sid,直接可以找到持锁会话的SID
5,
经过分析第1列即nodenum不是对应chain的编号,那么它是什么呢
经过对比分析,第一列nodenum其实就是一个顺序编号,不过它是和第3列sid对应起来,就是说下面的记录基于sid列的值进行升序排序,每行产生一个顺序编号,就是第一列nodenum的值
6,关于第一部分的构成含义,将在下文进行学习
测试
1,了解下state列不同值的含义
State of ALL nodes
([nodenum]/cnode/sid/sess_srno/session/ospid/state/[adjlist]):
[9]/1/10/1/0xdcba9740/10574/NLEAF/[31]
2,state列从目前的TRACE FILE共有
NLEAF
SINGLE_NODE
LEAF_NW
3,下面我们依次来看,先看NLEAF
([nodenum]/cnode/sid/sess_srno/session/ospid/state/[adjlist]):
[9]/1/10/1/0xdcba9740/10574/NLEAF/[31]
其上对应的chain
由上定位到如下
[31]/1/32/9465/0xdcb699a0/6664/LEAF_NW/
另启一路分析
[41]/1/42/10233/0xdcb4c940/6724/NLEAF/[204]
[204]/1/205/9696/0xdc9737f0/6439/LEAF_NW/
经过分析第1列即nodenum不是对应chain的编号,那么它是什么呢
经过对比分析,第一列nodenum其实就是一个顺序编号,不过它是和第3列sid对应起来,就是说下面的记录基于sid列的值进行升序排序,每行产生一个顺序编号,就是第一列nodenum的值
([nodenum]/cnode/sid/sess_srno/session/ospid/state/[adjlist]):
[9]/1/10/1/0xdcba9740/10574/NLEAF/[31]
[11]/1/12/1/0xdcba3a60/10578/SINGLE_NODE/
[28]/1/29/10069/0xdcb724f0/6728/NLEAF/[204]
[31]/1/32/9465/0xdcb699a0/6664/LEAF_NW/
[32]/1/33/11792/0xdcb66b30/6612/NLEAF/[204]
[33]/1/34/3/0xdcb63cc0/10707/SINGLE_NODE/
[38]/1/39/9453/0xdcb55490/6754/NLEAF/[204]
[39]/1/40/8844/0xdcb52620/6789/NLEAF/[204]
[41]/1/42/10233/0xdcb4c940/6724/NLEAF/[204]
[43]/1/44/11098/0xdcb46c60/6785/NLEAF/[204]
[45]/1/46/10603/0xdcb40f80/6716/NLEAF/[204]
[48]/1/49/10605/0xdcb38430/6387/NLEAF/[195]
[50]/1/51/10173/0xdcb32750/6584/NLEAF/[204]
[53]/1/54/10303/0xdcb29c00/6626/NLEAF/[204]
[55]/1/56/11968/0xdcb23f20/6722/NLEAF/[204]
[57]/1/58/10957/0xdcb1e240/6668/NLEAF/[124]
[60]/1/61/10526/0xdcb156f0/6421/NLEAF/[204]
[66]/1/67/9091/0xdcb04050/6656/NLEAF/[124]
[67]/1/68/10357/0xdcb011e0/6445/NLEAF/[204]
[68]/1/69/11059/0xdcafe370/6602/NLEAF/[31]
[71]/1/72/10284/0xdcaf5820/6777/NLEAF/[204]
[73]/1/74/10061/0xdcaefb40/6349/NLEAF/[31]
[75]/1/76/9182/0xdcae9e60/6604/NLEAF/[204]
[76]/1/77/9500/0xdcae6ff0/6742/NLEAF/[204]
[77]/1/78/11564/0xdcae4180/6797/NLEAF/[204]
[78]/1/79/10481/0xdcae1310/6326/NLEAF/[204]
NLEAF表明等待会话,而LEAF_NW表明持锁会话
SINGLE_NODE它不等待任何会话也不阻塞任何会话
而且如果state值为NLEAF,adjlist列会有值,这个值到底是什么含义呢?
我们随机挑出几条相关记录,找相它们的规律,分析adjlist的含义,可见NLEAF后面的adjlist等于持锁会话sid+1,也就是说用adjlist-1就是持锁会话的sid,直接可以找到持锁会话的SID
([nodenum]/cnode/sid/sess_srno/session/ospid/state/[adjlist]):
[9]/1/10/1/0xdcba9740/10574/NLEAF/[31]
Chain 1:
-------------------------------------------------------------------------------
Oracle session identified by:
{
instance: 1 (guowang.guowang)
os id: 10574
process id: 10, oracle@seconary (DBW0)
session id: 10
session serial #: 1
}
中间略
and is blocked by
=> Oracle session identified by:
{
instance: 1 (guowang.guowang)
os id: 6664
process id: 91, oracle@seconary (J063)
session id: 32 --即为adjlist+1
session serial #: 9465
[43]/1/44/11098/0xdcb46c60/6785/NLEAF/[204]
Chain 16:
-------------------------------------------------------------------------------
Oracle session identified by:
{
instance: 1 (guowang.guowang)
os id: 6785
process id: 174, oracle@seconary (J144)
session id: 44
session serial #: 11098
}
is waiting for 'buffer busy waits' with wait info:
{
p1: 'file#'=0x1
p2: 'block#'=0x15ab9
p3: 'class#'=0x1
time in wait: 0.013613 sec
timeout after: never
wait id: 56
blocking: 0 sessions
current sql:
中间略
and is blocked by 'instance: 1, os id: 6439, session id: 205', --即为adjlist+1
[57]/1/58/10957/0xdcb1e240/6668/NLEAF/[124]
Chain 4:
-------------------------------------------------------------------------------
Oracle session identified by:
{
instance: 1 (guowang.guowang)
os id: 6668
process id: 98, oracle@seconary (J070)
session id: 58
session serial #: 10957
}
中间略
and is blocked by
=> Oracle session identified by:
{
instance: 1 (guowang.guowang)
os id: 6648
process id: 80, oracle@seconary (J052)
session id: 125 ----即为adjlist+1
session serial #: 10219
}
正文到此结束