基於oracle 10.2.0.1 rac使用oradebug dump hanganalyze 分析oracle hang系列四
背景
發現oracle 10.2.0.1 rac的SQL查詢也HANG住了,藉此用下hanganalyze,練練手,但發現基於RAC的HANGANALYZE與單例項的TRACE FILE區別相當大,一時也抓不到頭緒,既然如此,學習下基於RAC的HANAANALYZE的產生TRACE FILE的格式及內容構成。
結論
1,基於rac環境下預設的RAC下的ORADEBUG DUMP HANGANALYZE 3與ORADEBUG SETINST ALL以及ORADEBUG DUMP HANGANALYZE 3產生的TRACE FILE內容相同
2,trace file共計4個部分
2.1,第一部分
Open chains found: --這是第一部分,這個部分可能有值,也可能無值,經過對比,發現如果DB HANG,此部分會有值
2.2, 第二部分
Other chains found: --這是第二部分
Chain 1 : <cnode/sid/sess_srno/proc_ptr/ospid/wait_event> :
<1/137/1/0x83a64388/7504/Streams AQ: waiting for time man>
2.3,第三部分
Extra information that will be dumped at higher levels: ---如果DUMP級別越高,獲取的資訊越多,下為具體的講解
[level 5] : 6 node dumps -- [SINGLE_NODE] [SINGLE_NODE_NW] [IGN_DMP]
[level 10] : 21 node dumps -- [IGN]
2.4,第四部分
State of nodes
([nodenum]/cnode/sid/sess_srno/session/ospid/state/start/finish/[adjlist]/predecessor):
[135]/1/136/47/0x83b53b38/22712/IGN/1/2//none
[136]/1/137/1/0x83b54f70/7504/SINGLE_NODE/3/4//none --可見predecessor全為none
[137]/1/138/2/0x83b563a8/7377/SINGLE_NODE/5/6//none
[139]/1/140/5/0x83b58c18/7137/SINGLE_NODE/7/8//none --可見adjlist為
3,trace file中一些標識的含義:
cnode即生成hanganalyze的RAC節點編號(節點編號從0開始,依次遞增),這個其實對於分析沒有什麼實質的意義,不過可以從這個看出,TRACEFILE是在哪個RAC節點生成的
start及finish感覺好像是2個連續的數字,並且採用迴環式前進編號,即1,2為對應一條記錄,然後3,4對應下面的記錄,依次類推
sess_srno為session為v$session.saddr
4,同時從另一個RAC節點,可見在持鎖會話的告警日誌會提示持鎖程式的資訊以及生成TRACE FILE
Tue Nov 10 09:00:06 2015
GES: Potential blocker (pid=3541) on resource TX-0xa0007-0x87;
enqueue info in file /u01/app/oracle/admin/jingfa/bdump/jingfa1_lmd0_15271.trc and DIAG trace file
引申下,即發生鎖問題,可以從告警日誌找到相關的線索,進一步分析
分析方法
1,以模擬環境生成trace file,以理解其內容,爾後反推和生產環境進行比對參考學習2,對比性學習,即如果對某個值不同,以正向測試下,再以反向測試下,可以瞭解此值或標識的含義
測試
--node1
SQL> select sid,serial#,saddr from v$session where sid=(select sid from v$mystat where rownum=1);
SID SERIAL# SADDR
---------- ---------- ----------------
153 5 0000000083B692F0
SQL> select pid,spid from v$process where addr=(select paddr from v$session where sid=(select sid from v$mystat where rownum=1));
PID SPID
---------- ------------
18 3541
SQL> select * from t_lock;
A B
---------- ----------
1 1
2 2
--node2
SQL> conn tbs_zxy/system
Connected.
SQL> select sid,serial#,saddr from v$session where sid=153;
SID SERIAL# SADDR
---------- ---------- ----------------
153 5 0000000083B692F0
SQL> select pid,spid from v$process where addr=(select paddr from v$session where sid=(select sid from v$mystat where rownum=1));
PID SPID
---------- ------------
18 31569
--node1
SQL> update t_lock set a=11 where a=1;
1 row updated.
--node2
SQL> update t_lock set a=121 where a=1;
--hang住
---node2
--生成一個tracefile
SQL> oradebug setmypid
Statement processed.
SQL> oradebug dump hanganalyze 3
Statement processed.
SQL> oradebug tracefile_name
==============
HANG ANALYSIS:
==============
Open chains found: --這是第一部分,這個部分可能有值,也可能無值,經過對比,發現如果DB HANG,此部分會有值
Other chains found: --這是第二部分
Chain 1 : <cnode/sid/sess_srno/proc_ptr/ospid/wait_event> :
<1/137/1/0x83a64388/7504/Streams AQ: waiting for time man>
Chain 2 : <cnode/sid/sess_srno/proc_ptr/ospid/wait_event> :
<1/138/2/0x83a63ba0/7377/Streams AQ: qmn slave idle wait>
Chain 3 : <cnode/sid/sess_srno/proc_ptr/ospid/wait_event> : --空閒等待事件不用關注
<1/140/5/0x83a62bd0/7137/Streams AQ: qmn coordinator idle>
Chain 4 : <cnode/sid/sess_srno/proc_ptr/ospid/wait_event> :
<1/148/645/0x83a60448/5400/No Wait> --No Wait表明當前會話不等待什麼資源,不用關注
Chain 5 : <cnode/sid/sess_srno/proc_ptr/ospid/wait_event> :
<1/153/5/0x83a5e4a8/31569/enq: TX - row lock contention> ---需要關注,直接可以定位到
Chain 6 : <cnode/sid/sess_srno/proc_ptr/ospid/wait_event> :
<1/169/1/0x83a56e10/6621/DIAG idle wait>
如下為第三部分
Extra information that will be dumped at higher levels: ---如果DUMP級別越高,獲取的資訊越多,下為具體的講解
[level 5] : 6 node dumps -- [SINGLE_NODE] [SINGLE_NODE_NW] [IGN_DMP]
[level 10] : 21 node dumps -- [IGN]
此為第四部分
State of nodes
([nodenum]/cnode/sid/sess_srno/session/ospid/state/start/finish/[adjlist]/predecessor):
[135]/1/136/47/0x83b53b38/22712/IGN/1/2//none
[136]/1/137/1/0x83b54f70/7504/SINGLE_NODE/3/4//none --可見predecessor全為none
[137]/1/138/2/0x83b563a8/7377/SINGLE_NODE/5/6//none
[139]/1/140/5/0x83b58c18/7137/SINGLE_NODE/7/8//none --可見adjlist為空
[142]/1/143/1/0x83b5c8c0/6971/IGN/9/10//none
[143]/1/144/1/0x83b5dcf8/6944/IGN/11/12//none
[144]/1/145/1/0x83b5f130/6950/IGN/13/14//none
[147]/1/148/645/0x83b62dd8/5400/SINGLE_NODE_NW/15/16//none --start及finish感覺好像是2個連續的數字,並且採用迴環式前進編號,即1,2為對應一條記錄,然後3,4對應下面的記錄,依次類推
[149]/1/150/1/0x83b65648/6710/IGN/17/18//none
[150]/1/151/1/0x83b66a80/6706/IGN/19/20//none
[152]/1/153/5/0x83b692f0/31569/SINGLE_NODE/21/22//none --等待者的資訊,session為v$session.saddr
[153]/1/154/1/0x83b6a728/6701/IGN/23/24//none
[154]/1/155/1/0x83b6bb60/6649/IGN/25/26//none
[155]/1/156/1/0x83b6cf98/6647/IGN/27/28//none
[156]/1/157/1/0x83b6e3d0/6645/IGN/29/30//none
[157]/1/158/1/0x83b6f808/6643/IGN/31/32//none
[158]/1/159/1/0x83b70c40/6641/IGN/33/34//none
[159]/1/160/1/0x83b72078/6639/IGN/35/36//none
[160]/1/161/1/0x83b734b0/6637/IGN/37/38//none
[161]/1/162/1/0x83b748e8/6635/IGN/39/40//none
[162]/1/163/1/0x83b75d20/6633/IGN/41/42//none
[164]/1/165/1/0x83b78590/6629/IGN/43/44//none
[165]/1/166/1/0x83b799c8/6627/IGN/45/46//none
[166]/1/167/1/0x83b7ae00/6625/IGN/47/48//none
[167]/1/168/1/0x83b7c238/6623/IGN/49/50//none
[168]/1/169/1/0x83b7d670/6621/SINGLE_NODE/51/52//none
[169]/1/170/1/0x83b7eaa8/6619/IGN/53/54//none
====================
END OF HANG ANALYSIS
====================
/u01/app/oracle/admin/jingfa/udump/jingfa2_ora_5400.trc
同時從另一個RAC節點,可見在持鎖會話的告警日誌會提示持鎖程式的資訊以及生成TRACE FILE
Tue Nov 10 09:00:06 2015
GES: Potential blocker (pid=3541) on resource TX-0xa0007-0x87;
enqueue info in file /u01/app/oracle/admin/jingfa/bdump/jingfa1_lmd0_15271.trc and DIAG trace file
--node2
上述TRACE FILE是基於單例項模式生成TRACE FILE,我們基於RAC環境再生成下TRACE FILE,對比看內容有何區別
SQL> oradebug setinst all
Statement processed.
SQL> oradebug dump hanganalyze 3
Statement processed.
SQL> oradebug tracefile_name
/u01/app/oracle/admin/jingfa/udump/jingfa2_ora_1139.trc
經過對比,預設的RAC下的ORADEBUG DUMP HANGANALYZE 3與ORADEBUG SETINST ALL以及ORADEBUG DUMP HANGANALYZE 3產生的TRACE FILE內容相同
==============
HANG ANALYSIS:
==============
Open chains found:
Other chains found:
Chain 1 : <cnode/sid/sess_srno/proc_ptr/ospid/wait_event> :
<1/137/1/0x83a64388/7504/Streams AQ: waiting for time man>
Chain 2 : <cnode/sid/sess_srno/proc_ptr/ospid/wait_event> :
<1/138/2/0x83a63ba0/7377/Streams AQ: qmn slave idle wait>
中間內容略
[166]/1/167/1/0x83b7ae00/6625/IGN/47/48//none
[167]/1/168/1/0x83b7c238/6623/IGN/49/50//none
[168]/1/169/1/0x83b7d670/6621/SINGLE_NODE/51/52//none
[169]/1/170/1/0x83b7eaa8/6619/IGN/53/54//none
====================
END OF HANG ANALYSIS
====================
再看看下cnode的含義
([nodenum]/cnode/sid/sess_srno/session/ospid/state/start/finish/[adjlist]/predecessor):
[135]/1/136/47/0x83b53b38/22712/IGN/1/2//none
我們調整下在RAC2個節點阻塞者及等待者的順序
---node2
SQL> select sid,serial#,saddr from v$session where sid=(select sid from v$mystat where rownum=1);
SID SERIAL# SADDR
---------- ---------- ----------------
153 20 0000000083B692F0
SQL> select pid,spid from v$process where addr=(select paddr from v$session where sid=(select sid from v$mystat where rownum=1));
PID SPID
---------- ------------
18 15971
SQL> update t_lock set a=11 where a=1;
1 row updated.
---node1
SQL> select sid,serial#,saddr from v$session where sid=(select sid from v$mystat where rownum=1);
SID SERIAL# SADDR
---------- ---------- ----------------
153 9 0000000083B692F0
SQL> select pid,spid from v$process where addr=(select paddr from v$session where sid=(select sid from v$mystat where rownum=1));
PID SPID
---------- ------------
18 27178
SQL> update t_lock set a=123 where a=1;
hang住
--node1
生成trace file
SQL> oradebug setmypid
Statement processed.
SQL> oradebug dump hanganalyze 3
Statement processed.
SQL> oradebug tracefile_name
/u01/app/oracle/admin/jingfa/udump/jingfa1_ora_30236.trc
---可見在NODE1生成trace file,cnode為0
([nodenum]/cnode/sid/sess_srno/session/ospid/state/start/finish/[adjlist]/predecessor):
[136]/0/137/6/0x83b54f70/31964/IGN/1/2//none
中間內容略
[167]/0/168/1/0x83b7c238/15267/IGN/43/44//none
[168]/0/169/1/0x83b7d670/15265/SINGLE_NODE/45/46//none
[169]/0/170/1/0x83b7eaa8/15263/IGN/47/48//none
---延續上,在node2生成TRACE FILE
---可見在NODE2生成trace file,cnode為1
([nodenum]/cnode/sid/sess_srno/session/ospid/state/start/finish/[adjlist]/predecessor):
[135]/1/136/47/0x83b53b38/22712/IGN/1/2//none
[136]/1/137/1/0x83b54f70/7504/SINGLE_NODE/3/4//none
中間內容略
[169]/1/170/1/0x83b7eaa8/6619/IGN/53/54//none
可見在不同RAC節點生成hanganalyze ,其cnode對應生成hanganalyze的RAC節點編號(節點編號從0開始,依次遞增)
這個其實對於分析沒有什麼實質的意義,不過可以從這個看出,TRACEFILE是在哪個RAC節點生成的
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-1827352/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 基於oracle 10.2.0.1 rac使用oradebug dump hanganalyze 分析oracle hang系列五Oracle
- 基於oracle 10.2.0.1 rac使用oradebug dump hanganalyze 分析oracle hang系列六Oracle
- 使用oradebug dump hanganalyze分析oracle hang系列一Oracle
- 使用oradebug dump hanganalyze 分析oracle hang系列二Oracle
- 使用oradebug dump hanganalyze 分析oracle hang系列三Oracle
- 基於oracle 10.2.0.1 rac學習lms程式系列四Oracle
- oradebug分析oracle hangOracle
- Oracle使用hanganalyze 命令分析資料庫hang【轉】Oracle資料庫
- 【Oracle】使用hanganalyze 命令分析資料庫hang【轉】Oracle資料庫
- 基於oracle 10.2.0.1 rac學習lmon程式系列六Oracle
- oracle資料庫hang住分析工具Hanganalyze使用總結Oracle資料庫
- 基於oracle 10.2.0.1 rac學習lmon程式系列六之增補一Oracle
- 用strace跟蹤分析oracle 10.2.0.1 rac lmd程式系列二Oracle
- oracle 10.2.0.1 rac發現sql查詢hang之gc cr requestOracleSQLGC
- oradebug分析oracle hang或慢_sqlplus_prelimOracleSQL
- Oracle Hang分析Oracle
- 在oracle10g及oracle11g使用oradebug生成systemstate dump檔案系列二Oracle
- 使用HangFG進行Oracle Hang分析Oracle
- oracle rac 10.2.0.1 升級到 oracle 10.2.0.4Oracle
- 由研究oracle rac lms程式引發10708 event及oradebug dump bufferOracle
- Oracle hanganalyzeOracle
- 轉貼_Oradebug hanganalyze分析library cache等待
- 基於10.2.0.1 rac deadlock死鎖 trace file分析_增補二
- About Oracle HanganalyzeOracle
- Oracle RAC Cache Fusion 系列十七:Oracle RAC DRMOracle
- oracle oradebug使用詳解Oracle
- 使用Oradebug修改Oracle SCNOracle
- 使用AWK分析Oracle系統鎖定、Hang狀態Oracle
- Oracle 10g rac升級(10.2.0.1 Rac到10.2.0.4)Oracle 10g
- Oracle RAC Cache Fusion 系列一:基礎概念Oracle
- Oracle RAC CacheFusion 系列十五:Oracle RAC CRServer Part TwoOracleServer
- Oracle oradebug 命令 使用說明Oracle
- Oracle oradebug命令使用說明Oracle
- Oracle RAC 10.2.0.1 升級 10.2.0.4 簡單描述Oracle
- Oracle10.2.0.1RAC 升級 Oracle10.2.0.5案例分享 -DATABASE篇OracleDatabase
- Oracle10.2.0.1RAC 升級 Oracle10.2.0.5案例分享 -CRS篇Oracle
- [oradebug命令學習4]HANGANALYZE
- Oradebug使用淺談--生成Hang或Locking問題分析檔案