快取融合(Cache Fusion)介紹
概念
簡單地說,快取融合就是把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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- redis快取介紹Redis快取
- Spring Cache 介紹Spring
- 介紹SpringBoot 整合 Redis 快取Spring BootRedis快取
- Spring Cache快取框架Spring快取框架
- SpringBoot系列——cache快取Spring Boot快取
- Caffeine快取的簡單介紹快取
- Guava學習:Cache快取Guava快取
- Spring Boot Cache Redis快取Spring BootRedis快取
- Spring Cache快取註解Spring快取
- 淺聊HTTP快取 (HTTP Cache)HTTP快取
- localStorage和SessionStorage,Application,Cache快取SessionAPP快取
- OkHttpClient原始碼分析(三)—— 快取機制介紹HTTPclient原始碼快取
- HTTP快取——304與200 from cacheHTTP快取
- LRU cache快取簡單實現快取
- ansible 開啟facts_cache快取快取
- 前端優化:瀏覽器快取技術介紹前端優化瀏覽器快取
- 谷歌瀏覽器怎麼清除快取 chrome瀏覽器清理快取方法介紹谷歌瀏覽器快取Chrome
- JAVA 拾遺 — CPU Cache 與快取行Java快取
- 如何配置極狐GitLab Runner Cache 快取Gitlab快取
- HTTP請求的快取(Cache)機制HTTP快取
- 分散式快取 - 快取簡介,常用快取演算法分散式快取演算法
- Ehcache介紹及整合Spring實現快取記憶體Spring快取記憶體
- [譯]高效能快取庫Caffeine介紹及實踐快取
- DCS分散式快取服務例項型別介紹分散式快取型別
- SpringBoot 實戰 (十一) | 整合資料快取 CacheSpring Boot快取
- Android快取機制-LRU cache原理與用法Android快取
- 如何部署極狐GitLab Runner Cache 快取配置?Gitlab快取
- Python 的快取機制: functools.lru_cachePython快取
- Oracle RAC Cache Fusion 系列一:基礎概念Oracle
- Oracle RAC Cache Fusion 系列十七:Oracle RAC DRMOracle
- 快取頭Cache-Control的含義和使用快取
- Web(Cache)Browser for Mac(Safari快取瀏覽工具)1.7WebMac快取
- 【Azure Redis 快取 Azure Cache For Redis】Redis連線池Redis快取
- 用於快取的新HTTP標準:Cache-Status和Target-Cache-Control快取HTTP
- 阿里巴巴開源的通用快取訪問框架JetCache介紹阿里快取框架
- 讀懂作業系統之快取原理(cache)(三)作業系統快取
- Java快取機制:Ehcache與Guava Cache的比較Java快取Guava
- Cache和Buffer都是快取,有什麼區別?Linux快取Linux