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的原因。
LMON主要藉助兩種心跳機制完成健康檢查:
1)節點之間網絡心跳,可以簡單理解爲節點間定時發送ping包檢測節點狀態,如果規定時間能收到迴應,就認爲對方狀態正常
2)通過控制文件磁盤心跳,每個節點的ckpt進程每3秒更新一次controlfile的數據快,由於controlfile是共享的,所以實例之間可以檢查對方是否及時更新controlfile來判斷對方的狀態。
5、DIAG: Diagnostic Capture Process。
用來打印診斷信息。diag進程會響應別的進程發出的dump請求,將相關的診斷信息寫到diag trace文件中。在RAC上,當發出global oradebug請求時,會由每個實例的diag進程來打印診斷信息到diag trace中。
比如:下面的命令用了“-g”,那麼生成的dump信息會分別寫到每個實例的diag trace文件中:
SQL>oradebug -g all hanganalyze 3
SQL>oradebug -g all dump systemstate 266
6、ASMB: ASM Background Process。
用於和ASM實例進行通訊,用來管理storage和提供statistics。當使用ASMCMD的cp命令時,需要用到ASM實例上的ASMB進程,數據庫實例的spfile如果位於存於ASM上,那麼也會用到ASMB進程。如果OCR存放在ASM中,也會用到ASMB。
7、RBAL:ASM Rebalance Master Process。
作爲ASM磁盤組進行rebalance時的協調者(Coordinator)。在數據庫實例上,由它來管理ASM磁盤組。
8、Onnn:ASM Connection Pool Process。
是從數據庫實例連接到ASM實例上的一些連接池,通過這些連接池,數據庫可以發送消息給ASM實例。比如,由它將打開文件的請求發送給ASM實例,這些連接池只處理一些較短的請求,不處理創建文件這種較長的請求。
9、PING:Interconnect Latency Measurement Process。
用來檢查集羣中各個實例間的私網通訊狀況。每個實例每隔幾秒會發送給其它實例一些消息,這些消息會由其它實例的PING進程收到。發送和接收信息花費的時間會被記錄下來並判斷是否正常。
10、LMHB: Global Cache/Enqueue Service Heartbeat Monitor。
監控本地的LMON, LMD, LCK0,RMS0 and LMSn等進程是否運行正常,是否被阻塞或者已經hang了。
11、RMSn:Oracle RAC Management Process。
完成對RAC的一些管理任務,比如當一個新的實例加入到集羣后,給這個實例創建相關的資源。
12、RSMN: Remote Slave Monitor Process。
管理後臺的slave進程的創建,作爲遠程實例的協調者來完成一些任務。
13、GTXn: Global Transaction Process。
在RAC環境中對於XA 事務提供透明支持,維護在RAC中的XA事務的global信息,完成global事務的兩階段提交。
14、RCBG: Result Cache Background Process。
這個進程用來處理RAC上Result Cache相關的消息。
15、ACMS: Atomic Control File to Memory Service Process。
作爲每個實例上的agent來保證SGA的更新在RAC的所有實例上都是同步的,或者是全局成功提交,或者由於一些問題而導致全局回滾。