Oracle 11g 新特性 – HM(Hang Manager)簡介

n-lauren發表於2015-12-29

在這篇文章中我們會對Oracle 11g 新特性—hang 管理器(Hang Manager) 進行介紹。我們需要說明,HM 只在RAC 資料庫中存在。

在我們診斷資料庫問題的時候,經常會遇到一些資料庫/程式 hang住的問題。對於hang的問題,一般來說,常見的原因有以下兩種。

死鎖(cycle)。對於這種hang, 除非迴圈被打破,問題會永遠存在。

某個堵塞者(blocker) 程式在持有了某些資源後堵住了其他程式。當然,根據堵塞的情況,我們可以把blocker

分為直接堵塞程式(immediate blocker)和根堵塞程式(root blocker)。而root blocker 在通常情況下會處於兩種狀態。

2.1 根堵塞程式處於空閒狀態,對於這種情況,終止這個程式能夠解決問題。

2.2 根堵塞程式正在等待某些和資料庫無關的資源(例如:等待I/O),對於這種情況,終止這個程式也許能解決問題。但是,從資料庫的角度來講,這已經超出了資料庫的範疇。

而從資料庫的角度來講, oracle有幾種死鎖的發現機制。 在這篇文章中我們會介紹11g RAC的新特性 hang管理器。hang 管理器的基本步驟是。

1.分配一部分記憶體空間用於存放hang analyze dump 資訊。

2.定期蒐集hang analyze dump資訊(本地和全域性)

3. 分析蒐集到的dump資訊,並確認系統中是否存在hang。

4. 利用分析的結果來解決hang問題。

接下來,我們對每個步驟進行具體的介紹。

步驟1: ORACLE 會分配一部分記憶體空間,我們稱之為 hang analysis

cache,用來存放蒐集的hang analyze dump i資訊。這部分記憶體空間在每個節點的資料庫例項上都存在。

步驟2:oracle 會定期蒐集hang

analyze 資訊,由於,HM特性是針對RAC資料庫的特性,hang analyze的級別會包括本地和全域性。另外,負責蒐集這些dump 資訊的後臺程式是DIA0(這個程式從11g才被介紹)。預設情況下每3秒鐘蒐集本地級別hang analyze dump, 每10 秒蒐集全域性級別hang analyze dump。

步驟3:因為,每個節點都會蒐集hang

analyze dump 資訊,那麼,意味著每個例項都會擁有自己的DIA0程式,負責完成本地的hang 分析。但是,對於RAC資料庫,很多hang的情況會包含多個例項的程式。所以,我們需要一個例項上的DIA0 程式作為master,來對多個例項蒐集到的資訊進行分析。對於11g版本,節點號最小的例項的DIA0程式會成為HM的master程式。當然,在例項級別發生了重新配置後,主(master)DIA0 程式會重新在存在的例項中重新被選舉出來。

對於hang的問題,HM採用以下的機制來進行檢測,當HM分析過幾個hang analyze dump(每30秒進行一次分析,至少經過三次分析)後,就會發現有一些程式之間存在著等待關係(我們可以稱之為open chain),而且在這段時間之內沒有任何的改變(例如,一直等待相同的等待事件),那麼,我們就可以懷疑,這些程式之間出現了hang的情況。而在進一步的驗證之後,的確發現這些程式之間存在著等待關係,那麼就會找到這個等待鏈(open chain)的根阻塞程式,並嘗試通過終止阻塞程式的方式來解決這個hang.當然,對於死鎖(dead lock)這種情況,我們採用的方式是,終止等待環中的一個程式。下面的圖形說明了以上的基本邏輯。

Oracle 11g 新特性 – HM(Hang Manager)簡介

步驟4: 在確認hang的確發生之後,根據hang的型別選擇對應的解決方案。對於HM 來說,如果這個hang線管的程式滿足以下條件之一,那麼HM就無法解決這個hang.

1. 除資料庫以外的其他層面的程式也和這個hang相關,例如:asm例項的程式。

2. 是由於使用者應用層面導致的,例如:TX鎖。

3. 並行查詢

4. 需要使用者手動干預。例如:阻塞程式在等待“log file switch ”(這種等待很可能是由於歸檔目錄對應的filesystem空間不足導致的。即使HM中知道了阻塞程式,hang的情況也無法得到解決)。

如果,hang是HM無法解決的型別,那麼HM會繼續跟蹤這個問題。

 而對於HM能夠解決的問題,其解決的辦法就是終止根阻塞程式。但是,如果這個阻塞程式是oracle 的主要後臺程式,終止它就會導致例項crash。所以,HM在解決hang的時候,也存在解決範圍。這個範圍是由隱含引數"_hang_resolution_scope" 控制的,這個引數可以有三個值off(預設值,也就是說HM不會去解決hang),process(允許HM終止阻塞程式,如果該程式不是主要的後臺程式),instance(允許HM終止阻塞程式,即使該程式是主要的後臺程式。終止該程式會導致例項終止)。

最後,我們對和HM 相關的一些引數和trace 檔案進行簡單的介紹。

引數:

_hang_resolution=TRUE 或者 FALSE。這個引數用於控制HM是否解決hang。

_hang_resolution_scope=OFF,PORCESS或者 INSTANCE。這個引數用於控制HM解決問題的範圍。

_hang_detection= <number>。 HM檢測hang的時間間隔,預設值為30(秒)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22990797/viewspace-1966986/,如需轉載,請註明出處,否則將追究法律責任。

相關文章