在這篇文章中我們會對Oracle 11g 新特性mdash;hang 管理器(Hang Manager) 進行介紹。我們需要說明,HM 只在RAC 數據庫中存在。在
在這篇文章中我們會對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=
本文永久更新鏈接地址:
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com