教你熟練使用hanganalyze來分析資料庫

2021-08-26 06:00:54 字數 3583 閱讀 7485

1.為什麼要使用hanganalyze?

oracle資料庫「真的」hang住了,可以理解為資料庫內部發生死鎖。因為普通的dml死鎖,oracle伺服器會自動監測他們的依賴關係,並回滾其中乙個操作,終止這種相互等待的局面。而當這種死鎖發生在爭奪核心級別的資源(比如說是pins或latches)時,oracle並不能自動的監測並處理這種死鎖。

其實很多時候資料庫並沒有hang住,而只是由於資料庫的效能問題,處理的時間比較長而已。

hanganalyze工具使用核心呼叫檢測會話在等待什麼資源,報告出佔有者和等待者的相互關係。另外,它還會將一些比較」interesting」的程序狀態dump出來,這個取決於我們使用hanganalyze的分析級別。

使用hanganalyze

hanganalyze工具從oracle8i第二版開始提供,到9i增強了診斷rac環境下的「集群範圍」的資訊,這意味著它將會報告出整個集群下的所有會話的資訊。

目前有三種使用hanganalyze的方法:

一種是會話級別的:

alter session set events 'immediate

trace name hanganalyze level ';

一種是例項級別:

oradebug hanganalyze

一種是集群範圍的:

oradebug setmypid

oradebug setinst all

oradebug -g def hanganalyze

先解釋下各個level的含義:

1-2:只有hanganalyze輸出,不dump任何程序

3:level2+dump出在in_hang狀態的程序

4:level3+dump出在等待鏈裡面的blockers(狀態為leaf/leaf_nw/ign_dmp)

5:level4+dump出所有在等待鏈中的程序(狀態為nleaf)

hanganalyze報告會分作許多片斷,會話片斷資訊總是由乙個header詳盡描述被提取的的會話資訊。oracle8i和9i的資訊略有不同:

oracle 8.x chain header:

oracle9i chain header:

: 先把在trace file中看到的一些縮略語解釋一下:

sid是 session id

sess_srno是serial#

proc_ptr是process pointer

ospid 是os process id

cnode是node id,oracle9i才用

nodenum是hanganalyze

自己為了記錄這些會話而定製的編號,從0開始排起。

state 是node的狀態

adjlist是臨近的node(通常代表乙個blocker node)

predecessor是predecessor node ,通常代表乙個 waiter node

接著解釋一下比較重要的一些node state:

in_hang:這表示該node處於死鎖狀態,通常還有其他node(blocker)也處於該狀態

leaf/leaf_nw:該node通常是blocker。通過條目的」predecessor」列可以判斷這個node是否是blocker。leaf說明該node沒有等待其他資源,而leaf_nw則可能是沒有等待其他資源或者是在使用cpu.

如下的例項說明了node16阻塞了node19的資源:

nodenum]/cnode/sid/sess_srno/session/

ospid/state/start/finish/[adjlist]/predecessor

[16]/0/17/154/0x24617be0/26800/leaf/29/30//19

[19]/0/20/13/0x24619830/26791/nleaf/33/34/[16]/186

nleaf:通常可以看作這些會話是被阻塞的資源。發生這種情況一般說明資料庫發生效能問題而不是資料庫hang

ign/ign_dmp:這類會話通常被認為是空閒會話,除非其adjlist列裡存在node。如果是非空閒會話則說明其adjlist裡的node正在等待其他node釋放資源。

single_node/single_node_nw:近似於空閒會話

實戰hanganalyze:

生成跟蹤檔案

sql> oradebug setmypid

已處理的語句

sql> oradebug hanganalyze 3

檢視跟蹤檔案

**********====

hang analysis:

**********====

open chains found:

chain 1 : :

<5/1/0x843630f8/2531/no wait>

chain 2 : :

<12/1/0x84364e48/2521/instance state change>

有乙個等待事件,作業系統程序是2521,經檢查,是smon,占用了乙個cpu的98%的資源

other chains found:

extra information that will be dumped at higher levels:

[level 4] : 2 node dumps -- [leaf] [leaf_nw] [ign_dmp]

[level 10] : 6 node dumps -- [ign]

state of nodes

([nodenum]/sid/sess_srno/session/state/

start/finish/[adjlist]/predecessor):

[0]/1/1/0x84405460/ign/1/2//none

[1]/2/1/0x84405de0/ign/3/4//none

[2]/3/1/0x84406760/ign/5/6//none

[3]/4/1/0x844070e0/ign/7/8//none

[4]/5/1/0x84407a60/leaf_nw/9/10//none

[5]/6/1/0x844083e0/ign/11/12//none

[10]/11/1/0x8440b360/ign/13/14//none

[11]/12/1/0x8440bce0/leaf/15/16//none

dumping system_state and

fixed_sga in process with ospid 2521

dumping process information

for process with ospid 2531

dumping process information

for process with ospid 2521

*** 2004-12-09 00:07:49.680

********************

end of hang analysis

********************

我們看到,並沒有發生死鎖,smon程序忙,說明在正確釋放資源。

如何熟練使用git

4.輸入git如果顯示一些資訊那麼這個git就是安裝成功的 5.建立乙個版本,就是有個目錄 mkdir lerangit cd learngit pwd初始化倉庫 git init 6.touch 檔名 配置郵箱名 git config global user.email 2043389890.co...

熟練使用有稜有角的記憶體

記憶體其實也沒什麼神秘的,就是乙個整合ic,這型別的ic一般包含四種型別的引腳 電源與地引腳,控制引腳 讀使能 寫使能 資料位引腳以及多位位址引腳。記憶體大小計算方式為2的 資料位引腳數 位址位引腳數和 除以2的8次方,單位我位元組,byte。記憶體的邏輯模型可以用乙個摩天大樓來模擬,大樓的每一層為...

熟練使用避免必備技能

建立檔案 會的不用再練習 游標前面插入 i 游標後面插入 a 下一行 o vim游標的基本操作與游標移動 vim 的拷貝 複製黏貼 與刪除 拷貝 yy yd 黏貼 p 刪除 dd dw 刪除一行 刪除乙個詞 游標的移動 左下上右 h j k l 跳到檔案頭 gg 跳到檔案尾 g 移動到行首 移動到行...