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 移動到行首 移動到行...