快取融合(Cache Fusion)介紹

huangdazhu發表於2019-02-22

概念

    簡單地說,快取融合就是把Oracle RAC資料庫中所有資料庫快取作為一個共享的資料庫快取,並被RAC中的所有節點共享。它是實現RAC的基本技術。

    快取融合主要有如下四個功能:

  (1) 提供擴充套件性的傳輸。

  (2) 在例項間傳輸資料庫的對映。

  (3) 跟蹤資源的當前位置和狀態。

  (4) 在每個例項的SGA的目錄結構中儲存資源資訊。


    圖中描述了兩節點RAC資料庫的執行情況。每個節點都執行一個資料庫例項,每個例項包含一組Oracle程式和用於快取的系統全域性區(SGA)。除了這些叢集中的每個節點都還執行著一組特殊的程式:全域性快取服務程式(Global Cache Service ,GCS)和全域性佇列服務程式(Global Enqueue Service,GES),GES主要負責維護字典快取和庫快取內的一致性,GCS主要負責協調不同例項間對資料塊的訪問,它們透過Global Resource Directory(GRD)來維護和記錄每個資料塊的狀態,使其在群集中的各個節點之間同步和序列處理對資料的訪問。同時,每個資料區塊又隸屬於某一個節點,對於這個資料區塊來說,這個節點稱為主節點(Master)。為了在伺服器之間均衡工作負載,群集中所有伺服器都可以成為部分資料塊的主節點,GCS 是oracle 用來實施快取融合的機制。

快取融合工作原理

    我們知道,Oracle RAC是採用共享磁碟方式實現資料庫的群集。群集環境中所有節點共享且併發地對磁碟上的資料庫進行更新,另外還要額外地需要同其它節點進行同步和序列機制,以避免兩個或多個節點同時更新同一資料頁上的記錄,那麼Oracle RAC是如何利用快取融合處理資料同步的?下面透過幾種情況模擬分析下快取的同步原理。

   (1) 節點A讀取一個全新的資料塊,該資料塊沒有被任何節點讀入

     ①節點A的請求發給GCS,GCS把這個請求轉發給這個資料塊的主節點,這裡假定是節點B。因為這個資料塊沒有在任何節點的記憶體中,GCS標記這個資料塊狀態為S(shared,共享狀態),並記錄到GRD中。

     ②接著B告訴節點A狀態修改了,準備工作都完成了。然後節點A記錄共享狀態在自己的例項中,並讀入該資料塊。這時,節點A持有了該資料塊,並在GRD中進行記錄,標記持有該資料塊。此時,整個過程發生了一次IO操作。


  (2) 節點C要修改剛才節點A讀入的資料塊,這裡假定節點A剛才讀入的資料塊SCN是100。

    ①節點C找到該資料塊的主節點,也就是節點B,要求能加一個X標記(exclusive,獨佔狀態),表明要修改資料。但是這個資料塊可能已經存在於多個節點的例項中,每個例項都有個S標記。

    ②GCS會告訴所有持有該資料塊的例項,把狀態S標記轉換為N標記(null,空狀態)。

    ③最後一個從S標記轉換為N標記的例項把資料塊傳送到需要對其進行修改的節點如節點C上。

    ④這時節點C的例項就可以對該資料塊加上X標記,並通知該資料塊的主節點,也就是節點B的GCS,GCS將最新的標記與位置記錄到GRD,並關閉以前節點的資源記錄。這時節點C就可以修改該資料塊了,假定把SCN從100修改成了101,這個時候磁碟上的資料塊SCN還是100,整個過程是透過內部互聯進行資料交換,沒有磁碟IO產生。



   (3) 節點D也要修改該資料塊

    ①與節點C修改該資料塊類似,節點D也會找到該資料塊的主節點,也就是節點B,要求加一個X(exclusive,獨佔狀態)的鎖,表示要修改該資料塊。 

    ②這時GCS會告訴上一次修改成功的節點C,放棄它加上的X標記,因為別的節點也要修改這個資料塊。

    ③節點C會確保這個資料塊的改變,已經記入聯機日誌中,然後轉換X標記為N標記,並把這個資料塊複製到節點D。

    ④節點D加上X標記,並通知該資料塊的主節點,也就是節點B的GCS,GCS將最新的標記與位置揭露到GRD,並關閉以前節點上的資源記錄。這時節點D就可以修改該資料塊了,假定把該資料塊的SCN從101又修改成102,但是磁碟的資料塊上的SCN還是100。可以發現RAC在這個過程中,也沒有任何磁碟操作,同樣是透過內部互聯來完成的。


    (4) 節點A要重新讀取該資料塊

     ①節點A還是一樣,首先找到該資料塊的主節點,也就是節點B,希望能讀取最新的資料塊,也就是SCN為102的內容。

     ②GCS根據GRD得知最新的資料塊在節點D上,於是GCS通知節點D。節點D需要確保剛才修改過的資料塊已經記錄在聯機日誌中,如果已經確定記錄過,則把原來的X標記轉換為S標記。

     ③節點D複製資料塊到節點A的例項,這時節點A獲得該資料塊,並獲得S標記。

     ④最後再告訴該資料塊的主節點,也就是節點B,GCS記錄最新的標記與位置到GRD,這個時候,節點A與節點D同時持有S標記的相同的資料塊,資料塊的SCN為102,但是磁碟中的資料塊SCN還是100,最後如果發生寫操作,只要最新的一個節點發生寫操作即可,所以該資料塊雖然在不同節點、不同例項中發生了多次改變,最終卻只有一次寫IO操作。


結語

    透過對快取融合工作原理的介紹,我們就大致知道了快取融合在RAC環境下是如何工作的,也為我們以後有針對性的對其就行最佳化提供了依據。


原文:https://blog.csdn.net/wenzhongyan/article/details/7722166 



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

相關文章