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

來源:互聯網
上載者:User

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

在這篇文章中我們會對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)這種情況,我們採用的方式是,終止等待環中的一個進程。下面的圖形說明了以上的基本邏輯。

步驟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(秒)。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.