溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

數(shù)據(jù)庫緩存融合分析

發(fā)布時間:2021-11-09 15:54:48 來源:億速云 閱讀:106 作者:iii 欄目:關(guān)系型數(shù)據(jù)庫

本篇內(nèi)容主要講解“數(shù)據(jù)庫緩存融合分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“數(shù)據(jù)庫緩存融合分析”吧!

概念

    簡單地說,緩存融合就是把Oracle RAC數(shù)據(jù)庫中所有數(shù)據(jù)庫緩存作為一個共享的數(shù)據(jù)庫緩存,并被RAC中的所有節(jié)點共享。它是實現(xiàn)RAC的基本技術(shù)。

    緩存融合主要有如下四個功能:

  (1) 提供擴展性的傳輸。

  (2) 在實例間傳輸數(shù)據(jù)庫的映射。

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

  (4) 在每個實例的SGA的目錄結(jié)構(gòu)中保存資源信息。

    圖中描述了兩節(jié)點RAC數(shù)據(jù)庫的運行情況。每個節(jié)點都運行一個數(shù)據(jù)庫實例,每個實例包含一組Oracle進程和用于緩存的系統(tǒng)全局區(qū)(SGA)。除了這些集群中的每個節(jié)點都還運行著一組特殊的進程:全局緩存服務(wù)進程(Global Cache Service ,GCS)和全局隊列服務(wù)進程(Global Enqueue Service,GES),GES主要負責(zé)維護字典緩存和庫緩存內(nèi)的一致性,GCS主要負責(zé)協(xié)調(diào)不同實例間對數(shù)據(jù)塊的訪問,它們通過Global Resource Directory(GRD)來維護和記錄每個數(shù)據(jù)塊的狀態(tài),使其在群集中的各個節(jié)點之間同步和串行處理對數(shù)據(jù)的訪問。同時,每個數(shù)據(jù)區(qū)塊又隸屬于某一個節(jié)點,對于這個數(shù)據(jù)區(qū)塊來說,這個節(jié)點稱為主節(jié)點(Master)。為了在服務(wù)器之間均衡工作負載,群集中所有服務(wù)器都可以成為部分數(shù)據(jù)塊的主節(jié)點,GCS 是oracle 用來實施緩存融合的機制。

緩存融合工作原理

    我們知道,Oracle RAC是采用共享磁盤方式實現(xiàn)數(shù)據(jù)庫的群集。群集環(huán)境中所有節(jié)點共享且并發(fā)地對磁盤上的數(shù)據(jù)庫進行更新,另外還要額外地需要同其它節(jié)點進行同步和串行機制,以避免兩個或多個節(jié)點同時更新同一數(shù)據(jù)頁上的記錄,那么Oracle RAC是如何利用緩存融合處理數(shù)據(jù)同步的?下面通過幾種情況模擬分析下緩存的同步原理。

   (1) 節(jié)點A讀取一個全新的數(shù)據(jù)塊,該數(shù)據(jù)塊沒有被任何節(jié)點讀入

     ①節(jié)點A的請求發(fā)給GCS,GCS把這個請求轉(zhuǎn)發(fā)給這個數(shù)據(jù)塊的主節(jié)點,這里假定是節(jié)點B。因為這個數(shù)據(jù)塊沒有在任何節(jié)點的內(nèi)存中,GCS標記這個數(shù)據(jù)塊狀態(tài)為S(shared,共享狀態(tài)),并記錄到GRD中。

     ②接著B告訴節(jié)點A狀態(tài)修改了,準備工作都完成了。然后節(jié)點A記錄共享狀態(tài)在自己的實例中,并讀入該數(shù)據(jù)塊。這時,節(jié)點A持有了該數(shù)據(jù)塊,并在GRD中進行記錄,標記持有該數(shù)據(jù)塊。此時,整個過程發(fā)生了一次IO操作。

  (2) 節(jié)點C要修改剛才節(jié)點A讀入的數(shù)據(jù)塊,這里假定節(jié)點A剛才讀入的數(shù)據(jù)塊SCN是100。

    ①節(jié)點C找到該數(shù)據(jù)塊的主節(jié)點,也就是節(jié)點B,要求能加一個X標記(exclusive,獨占狀態(tài)),表明要修改數(shù)據(jù)。但是這個數(shù)據(jù)塊可能已經(jīng)存在于多個節(jié)點的實例中,每個實例都有個S標記。

    ②GCS會告訴所有持有該數(shù)據(jù)塊的實例,把狀態(tài)S標記轉(zhuǎn)換為N標記(null,空狀態(tài))。

    ③最后一個從S標記轉(zhuǎn)換為N標記的實例把數(shù)據(jù)塊發(fā)送到需要對其進行修改的節(jié)點如節(jié)點C上。

    ④這時節(jié)點C的實例就可以對該數(shù)據(jù)塊加上X標記,并通知該數(shù)據(jù)塊的主節(jié)點,也就是節(jié)點B的GCS,GCS將最新的標記與位置記錄到GRD,并關(guān)閉以前節(jié)點的資源記錄。這時節(jié)點C就可以修改該數(shù)據(jù)塊了,假定把SCN從100修改成了101,這個時候磁盤上的數(shù)據(jù)塊SCN還是100,整個過程是通過內(nèi)部互聯(lián)進行數(shù)據(jù)交換,沒有磁盤IO產(chǎn)生。

   (3) 節(jié)點D也要修改該數(shù)據(jù)塊

    ①與節(jié)點C修改該數(shù)據(jù)塊類似,節(jié)點D也會找到該數(shù)據(jù)塊的主節(jié)點,也就是節(jié)點B,要求加一個X(exclusive,獨占狀態(tài))的鎖,表示要修改該數(shù)據(jù)塊。 

    ②這時GCS會告訴上一次修改成功的節(jié)點C,放棄它加上的X標記,因為別的節(jié)點也要修改這個數(shù)據(jù)塊。

    ③節(jié)點C會確保這個數(shù)據(jù)塊的改變,已經(jīng)記入聯(lián)機日志中,然后轉(zhuǎn)換X標記為N標記,并把這個數(shù)據(jù)塊拷貝到節(jié)點D。

    ④節(jié)點D加上X標記,并通知該數(shù)據(jù)塊的主節(jié)點,也就是節(jié)點B的GCS,GCS將最新的標記與位置揭露到GRD,并關(guān)閉以前節(jié)點上的資源記錄。這時節(jié)點D就可以修改該數(shù)據(jù)塊了,假定把該數(shù)據(jù)塊的SCN從101又修改成102,但是磁盤的數(shù)據(jù)塊上的SCN還是100??梢园l(fā)現(xiàn)RAC在這個過程中,也沒有任何磁盤操作,同樣是通過內(nèi)部互聯(lián)來完成的。

    (4) 節(jié)點A要重新讀取該數(shù)據(jù)塊

     ①節(jié)點A還是一樣,首先找到該數(shù)據(jù)塊的主節(jié)點,也就是節(jié)點B,希望能讀取最新的數(shù)據(jù)塊,也就是SCN為102的內(nèi)容。

     ②GCS根據(jù)GRD得知最新的數(shù)據(jù)塊在節(jié)點D上,于是GCS通知節(jié)點D。節(jié)點D需要確保剛才修改過的數(shù)據(jù)塊已經(jīng)記錄在聯(lián)機日志中,如果已經(jīng)確定記錄過,則把原來的X標記轉(zhuǎn)換為S標記。

     ③節(jié)點D拷貝數(shù)據(jù)塊到節(jié)點A的實例,這時節(jié)點A獲得該數(shù)據(jù)塊,并獲得S標記。

     ④最后再告訴該數(shù)據(jù)塊的主節(jié)點,也就是節(jié)點B,GCS記錄最新的標記與位置到GRD,這個時候,節(jié)點A與節(jié)點D同時持有S標記的相同的數(shù)據(jù)塊,數(shù)據(jù)塊的SCN為102,但是磁盤中的數(shù)據(jù)塊SCN還是100,最后如果發(fā)生寫操作,只要最新的一個節(jié)點發(fā)生寫操作即可,所以該數(shù)據(jù)塊雖然在不同節(jié)點、不同實例中發(fā)生了多次改變,最終卻只有一次寫IO操作。

到此,相信大家對“數(shù)據(jù)庫緩存融合分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI