Oracle:RAC 程式簡介

dapolan發表於2022-03-08

GCS 全域性快取後臺程式

全域性快取主要服務於資料塊(PCM 資源)。GCS 負責維護全域性緩衝儲存區內的快取一致性,包括:資料塊的狀態,資料塊的位置,資料塊的傳輸等。GCS 確保一個例項在任何時刻想修改一個資料塊時,都可獲得一個全域性鎖資源,從而避免另一個例項同時修改該塊的可能性。進行修改的例項將擁有塊的當前版本(包括已提交的和未提交的事物更改)以及塊的一致性複製。如果另一個例項也請求該塊,那麼 GCS 要負責跟蹤擁有該塊的例項、擁有塊的版本是什麼,以及塊處於何種模式。LMS 程式是 GCS 的實現。

LMS(Global Cache Service Process,全域性快取服務程式)

LMS 是整個 Cache Fusion 體系最活躍和最忙碌的程式。它負責維護 GRD 中的資料塊資源資訊,處理在例項之間傳輸的塊的一致副本。LMS\<N> 程式接收響應來自 LMD 的執行鎖操作的請求,響應對 GCS 資源的鎖管理服務請求,並將它們傳送到服務佇列。此外它還承擔全域性死鎖的檢測任務並監控鎖轉換是否超時。所以一般在壓測或者高cpu消耗型系統,可以提高這個程式的優先順序,以確保不會出現CPU不足的情況。可以透過檢視x$kjmsdp檢視這個守護程式的統計資訊。

LMON(Global Enqueue Service Monitor,鎖監控程式)

LMON 主要負責整個資料庫叢集層面的一致性關係(CGS),監控整個叢集的全域性佇列和資源。在程式出現問題的情況下會執行 global enqueue 恢復,保持 GCS 記憶體結構的一致性,並且它還負責叢集重新配置和鎖重新配置(節點加入或離開),當一個例項加入或者離開叢集后,LMON 會對 lock 和 resource 進行 reconfiguration。另外 LMON 會在不同的例項間進行通訊檢查,如果發現對方通訊超時,就會發出節點 eviction。LMON 主要也是藉助兩種心跳機制來完成健康檢測。節點間的網路心跳(Network Heartbeat)即節點間定時傳送 Ping 包檢測節點狀態,超時時間由引數 \_cgs_send_timeout 控制,預設是 300 秒,這時的重構是 IMR 觸發的。透過控制檔案的磁碟心跳(ControlfileHeartbeat):每個節點的 CKPT 程式每隔三秒更新一次控制檔案的一個資料塊,這個資料塊叫做 Checkpoint Progress Record,由於控制檔案是共享的,因此例項間可以相互檢查對方是否及時更新以判斷狀態,時間由引數 \_controlfile_enqueue_timeout 控制,預設是 900 秒也是由由 IMR 觸發的。

DIAG(Diagnostic Capture Process,診斷守護程式)

DIAG 守護程式是一個輕量級程式,它使用 diag 框架來監視叢集的執行狀況。它捕獲資訊,以便在發生故障時進行後續診斷。diag 程式會響應別的程式發出的 dump 請求,將相關的診斷資訊寫到 diag trace 檔案中。在 RAC 上,當發出 global oradebug 請求時,會由每個例項的 diag 程式來列印診斷資訊到 diag trace 中。

GES 全域性佇列後臺程式

全域性排隊服務(GES)跟蹤所有 Oracle 佇列機制的狀態(No-PCM 資源),它主要負責維護資料字典快取(dictionary cache)和庫快取(library cache )的一致性和事務併發執行的一致性控制。dictionary cache 是例項的 SGA 內所儲存的對資料字典資訊的快取。由於資料字典資訊儲存在記憶體中,因而在某個節點上對資料字典進行的修改(如 DDL)必須立即被傳播至所有節點上的 dictionary cache。GES 負責處理上述情況,並消除例項間出現的差異。同時,為了不影響依賴這些物件的 SQL 語句的解析,資料庫內物件上的庫快取鎖會被去掉。這些鎖必須在例項間進行維護,而全域性佇列服務必須確保請求訪問相同物件的多個例項間不會出現死鎖。LMON、LCK 和LMD 程式聯合工作來實現全域性佇列服務的功能。GES 是除了資料塊本身的維護和管理(由 GCS 完成)之外,在 RAC 環境中協調節點間其他資源的重要服務。

LMD(Global Enqueue Service Daemon)

LMD 程式主要負責響應 GES,也就是 Oralce 中的排隊資源的管理工作。每一個全域性佇列的當前狀態儲存在相應的例項共享記憶體(sharedpool)中。當一個會話發出了 global enqueue 請求時,首先本節點的 LMD0 程式會響應這個請求,LMD0 程式開始尋找這個 enqueue 資源的 master 節點。找到後將這個請求傳送給 master 節點,如果需要的話,master 節點會增加一個新的 master 資源。從 mater 節點可以知道資源的 owner 和 waiter,當這個資源被授予請求例項後,master 節點的 LMD0 會通知請求例項的 LMD0,最後請求例項的 LMD0 通知前臺程式。此外 LMD 還有一個功能就是死鎖檢測及處理基本流程如下:

  1. LMD 程式定期搜尋各個例項的鎖資訊,發現可能的死鎖。

  2. 在可能的死鎖程式被發現之後,LMD 會驗證死鎖。

  3. 在得到驗證之後,LMD 會選擇回滾導致死鎖的程式的當前 SQL 語句,來打破死鎖。

LCK(Instance Enqueue Process)

LCK 主要負責例項鎖,可以認為他是 LMD 程式的完善補充。它主要處理在本例項層的鎖(Row Cache ,Library Cache,Result Cache),這些例項級的鎖的 owner, waiter 是 LCK0 程式。RAC 環境中如果本地的例項沒有擁有這個 lock,那麼需要申請這個 lock,前臺程式會等待的等待事件就是我們常遇到的 DFS Lock Handle。例項級別的鎖是有 LCK 程式透過廣播的方式進行管理的。

ASM

ASMB(ASM Background Process)

自動儲存管理後臺程式(ASM 心跳程式),負責同管理儲存的 ASM 例項進行通訊,提供對 ASM 例項的更新統計,和提供對 ASM 例項的一個 “heartbeat”,讓它知道它仍然是活著和起作用。

RBAL(ASM Rebalance Master Process)

再平衡程式。作為 ASM 磁碟組進行 rebalance 時的協調者(Coordinator)。在資料庫例項上,由它來管理 ASM 磁碟組

Onnn(ASM Connection Pool Process)

連線池程式。是從資料庫例項連線到 ASM 例項上的一些連線池,透過這些連線池,資料庫可以傳送訊息給 ASM 例項。比如,由它將開啟檔案的請求傳送給 ASM 例項,這些連線池只處理一些較短的請求,不處理建立檔案這種較長的請求。

PZ(PQ slaves)

PZnn 程式(圖找程式,picture 找程式)(從 PZ99 開始)用於查詢 GV$ 檢視,這種查詢需要在每個例項上並行執行。如果需要更多的 PZ 程式,會自動生成 PZ98、PZ97、... (降序)

11g 特有

PING(Interconnect Latency MeasurementProcess)

PING 程式(11g 引入)用來檢查叢集中各個例項間的私網通訊狀況。每個例項每隔幾秒會傳送給其它例項一些訊息,這些訊息會由其它例項的 PING 程式收到。傳送和接收資訊花費的時間會被記錄下來並判斷是否正常。

LMHB(Global Cache/Enqueue ServiceHeartbeat Monitor,本地心跳監控程式)

LMHB 程式(11g引入)監控本地的 LMON、LMD、LCK0、RMS0、LMSn 等程式是否執行正常,是否被阻塞或者已經 hang 了。

RMSn(Oracle RAC Management Process)

RAC 管理程式。完成對RAC的一些管理任務,比如當一個新的例項加入到叢集后,給這個例項建立相關的資源。 

RSMN(Remote Slave Monitor Process)

管理後臺的 slave 程式的建立,作為遠端例項的協調者來完成一些任務。 

GTXn(Global Transaction Process)

在 RAC 環境中對於 XA 事務提供透明支援,維護在 RAC 中的 XA 事務的 global 資訊,完成 global 事務的兩階段提交。 

RCBG(Result Cache Background Process)

這個程式用來處理 RAC 上 Result Cache 相關的訊息。 

ACMS(Atomic Control File to Memory Service Process)

作為每個例項上的 agent 來保證 SGA 的更新在 RAC 的所有例項上都是同步的,或者是全域性成功提交,或者由於一些問題而導致全域性回滾。 


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

相關文章