Oracle RAC Cache Fusion 系列八:Oracle RAC 分散式資源管理(一)

沃趣科技發表於2019-07-26

從Oracle8開始,DLM資料庫(儲存有關資源,鎖,程式的資訊)已整合在Oracle SGA中。 DLM記憶體區用於儲存所有鎖相關的master節點。 DLM不提供鎖定資源的能力,但是它會將資源提供為可鎖定實體。 在Oracle8i中,主節點與目錄節點是固定的這對鎖資源申請訪問並不友好。 從Oracle9i開始,這種固定的對應方式被取代,Oralce使用動態remaster技術,通過lookup表運用hash演算法將換算後的master key與實際的master做一一對應。

資源: 應用程式訪問的任何物件

客戶端: 任何要求資源的程式

鎖: 客戶端對資源的意圖

DLM服務: 允許客戶端應用程式建立,修改和刪除共享的鎖。

DLM資料庫: 儲存有關資源,鎖,程式的資訊


資源在Oracle中定義為(程式訪問的任何物件)。 每個資源都需要有當前授予的使用者鎖列表,此列表稱為Grant Q。 此外還有相對應的Convert Q,即等待轉換的鎖佇列。 此外,有些資源擁有用於儲存少量鎖定值的塊(LVB),一般16位元組。 例如,並行查詢子程式在申請的PS資源(Parallel SlaveSynchronization)的時候使用它儲存kxfpqd結構傳遞給其他節點。 這兩種資源型別具有不同的資料結構。 客戶端(使用者)必須鎖定資源才能使用它所代表的內容。

資源型別與資料結構的對應:

  • Enqueues:鎖定非PCM資源

  • lock Elements: 鎖定PCM資源

如果Oracle程式沒有遵循“使用前鎖定”規則,那麼這個系統就會亂套。 它可能在一段時間內不會顯示為系統或資料損壞。

當程式鎖定資源的授權佇列時,它被稱為“擁有”資源。 下圖顯示了對資源的Grant Q的鎖定。 鎖可以是程式或組擁有的。 程式擁有的情況下,則PID欄位顯示程式號。 組擁有鎖的情況下,GID欄位表示為組號,DID欄位表示為客戶端事務的XID(TxID)。

Oracle RAC Cache Fusion 系列八:Oracle RAC 分散式資源管理(一)

在一個簡單的實現中,DLM為程式提供鎖定。 這在維護程式到會話對映時工作正常。 但是,在MTS(共享伺服器)和XA(分散式)場景下,會話可能會涉及遷移,或者多個程式完成一個事務。 這時候提供基於會話的識別符號來控制對鎖的訪問是非常明智的選擇,這就是組鎖定引入的緣由。 通常,Oracle提供事務XID作為組ID,然後處理該事務的任何程式都只提供XID和鎖定操作即可。

Oracle RAC Cache Fusion 系列八:Oracle RAC 分散式資源管理(一)


影子資源

  • 主節點具有所有資源資訊,例如完全授權佇列和轉換佇列。

  • 影子資源存在於對此資源感興趣(申請鎖定)的任何其他節點上,但它只知道自己本地節點上的鎖。

Oracle RAC Cache Fusion 系列八:Oracle RAC 分散式資源管理(一)

影子資源存在於對資源感興趣的任何其他節點上,即對該資源開啟鎖定的任何節點。

在主節點以外的節點上保持鎖定時,主節點會在本地保留鎖定的副本。 資源感興趣的每個節點都只有一個鎖的副本。 複製鎖儲存在主節點上,這是主節點所必需的資訊。 其他資訊每個節點可以根據自己所需進行維護。 主節點具有主鎖,本地節點具有影子鎖。

Oracle RAC Cache Fusion 系列八:Oracle RAC 分散式資源管理(一)


基礎資源結構及資源管理

GRD(DLM)維護資源的所有節點上的鎖的資訊。 鎖master分佈在集 中的所有節點上。 主節點包含資源的描述以及資源上持有最高鎖定模式的鎖資訊。 Oracle根據資源名稱通過使用陣列來計算資源的主節點: res_hash_val_kjga(對於非PCM資源)和pcm_hv_kjga(對於PCM資源)。 它選擇一個節點來管理資源的相關資訊和在資源上的鎖資訊,這種節點稱為資源的主節點。 當節點加入或離開叢集時,重構階段Oracle會以最小化資源遷移更新res_hash_val_kjga和pcm_hv_kjga陣列。 每個陣列都包含一個bucket包含物理節點號。 對於非PCM資源,Oracle對資源名稱進行Hash以獲取儲存桶編號bidx,然後使用res_hash_val_kjga [bidx]確定資源的主節點編號,叢集中的每個節點的陣列都是私有化的。  

  • resource name: 用於標識的唯一名稱資源,Value Block: 記憶體中用於儲存有關資源資訊的區域。

  • Granted Queue: 在資源上授予鎖。

  • Convert Queue: 鎖在從一種模式轉換為另一種模式。

  • 每個非PCM資源在叢集中通過名稱進行標識,名稱”由3個4位元組的整陣列成(ub4 n[3])。

  • Non-PCM: 名稱由3個4位元組的整陣列成(ub4 n[3])。 n [0]設定為id1,n [1]設定為id2,n [3]接收字串值(例如“DI”或“LB”)。

  • PCM: 由具有兩個整數的名稱標識,具有第三個整數字符對為“BL”。

Oracle RAC Cache Fusion 系列八:Oracle RAC 分散式資源管理(一)


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

相關文章