共計 2232 個字符,預計需要花費 6 分鐘才能閱讀完成。
本篇內容主要講解“數據庫緩存融合分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“數據庫緩存融合分析”吧!
概念
簡單地說,緩存融合就是把 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 操作。
到此,相信大家對“數據庫緩存融合分析”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!