Oracle RAC後台進程介紹
在Oracle RAC資料庫上會比單一實例資料庫多一些進程,這些進程是RAC特有的,為了實現叢集資料庫功能而設定的。這篇文章會對RAC特有的進程做一些介紹。
1、LMSn: Global Cache Service Process。
LMSn進程會維護在Global Resource Directory (GRD)中的資料檔案以及每個cached block的狀態。LMSn用於在RAC的執行個體間進行message以及資料區塊的傳輸,這個對應的服務也就是GCS(Global Cache Service),LMS是Cache Fusion的一個重要部分。LMS進程可以說是RAC上最活躍的後台進程,會消耗較多的CPU.一般每個執行個體會有多個LMS進程,每個Oracle版本的預設的LMS進程數目會有所不同,大部分版本的預設值是:MIN(CPU_COUNT/2, 2))
2、LMD: Global Enqueue Service Daemon。(對應的服務叫GES服務)
LMD 進程主要處理從遠程節點發出的資源請求,在多個執行個體之間協調對資料區塊的訪問順序,保證資料的一致性訪問,大概過程如下:
+ 一個串連發出了global enqueue 請求
+ 這個請求會被發給本節點的LMD0進程
+ 這個前台進程會處於等待狀態
+ LMD0會找到這個資源的master節點是誰
+ LMD0會把這個請求發送給master節點
+ 如果需要的話,master節點會增加一個新的master資源
+ 這時從master節點可以獲知誰是owner, waiter
+ 當這個資源被grant給requestor後, master節點的LMD0進程會告知requestor節點的LMD0
+ 然後requestor節點的LMD0會通知申請資源的前台進程
GCS服務與GES服務還有GRD共同構成了RAC的Cache Fusion(緩衝融合)
緩衝融合是RAC內部最複雜的一部分,其中資料區塊是如何通過private network在執行個體之間傳遞,如何控制訪問順序,這些都很複雜,有興趣的同學可以研究
如上總結LMD主要處理global enqueue 的請求, 而LCK0主要處理本執行個體的lock.
另外,RAC上的global deadlock 也是由LMD來發現的。
3、LCK0: Instance Enqueue Process。
LCK0進程主要處理非cache fustion的資源請求,比如library 和row cache 請求。
LCK0處理在執行個體一級的鎖:
Row cache entries
Library cache entries
Result cache entries
這些執行個體級的鎖的owner, waiter是LCK0進程。
只要這個執行個體的鎖的owner是LCK0,那麼這個執行個體的任何一個串連都可以使用這種cached的metedata.
如果本地的執行個體沒有擁有這個lock,那麼需要申請這個lock,前台進程會等待DFS Lock Handle。
另外,當shared pool出現壓力需要釋放一些記憶體來存放新的cursor時,LCK進程會將dictionary cache 的一些記憶體進行釋放。
4、LMON: Global Enqueue Service Monitor。
LMON用於監控整個叢集的global enqueues和resources, 而且會執行global enqueue recovery。執行個體異常終止後,會由LMON來進行GCS記憶體方面的處理。當一個執行個體加入或者離開叢集後,LMON會對lock和resource進行reconfiguration.也就是說當某個節點出現故障時,LMON負責叢集重構,GRD恢複等操作,另外LMON會在不同的執行個體間進行通訊檢查,如果發現對方通訊逾時,就會發出節點eviction,所以很多時候節點發生eviction後(ORA-481, ORA-29740等),我們需要查看LMON的trace來瞭解eviction的原因。
Oracle 11g 在RedHat Linux 5.8_x64平台的安裝手冊
Linux-6-64下安裝Oracle 12C筆記
在CentOS 6.4下安裝Oracle 11gR2(x64)
Oracle 11gR2 在VMWare虛擬機器中安裝步驟
Debian 下 安裝 Oracle 11g XE R2
更多詳情見請繼續閱讀下一頁的精彩內容: