RAC Cache Fusion 原理理解,racfusion

來源:互聯網
上載者:User

RAC Cache Fusion 原理理解,racfusion
cache fusion  .   grd  .  drm   .   gcs  .   ges


cache fusion 
1.RAC是一個資料庫運行在多個執行個體上,通過DLM(Distributed Lock Management):分布式鎖管理器 來解決並發問題,RAC各個節點間的共用資源,為了保證每個節點訪問資料的一致性,所以需要使用DLM來協調各個執行個體間的資源競爭訪問。 這個DLM在RAC中就叫Cache Fusion.


2.在cache Fusion 中,每個資料區塊都被映射成Cache Fusion資源,該資源實際上就是一個資料結構,資源的名稱就是資料區塊地址,資料區塊請求過程:先將資料區塊地址X轉換成Cache Fusion資源名稱,然後把這個cache fusion 資源請求提交給DLM,DLM進行Global Lock 的申請,釋放活動,只要進程獲得了PCM Lock才能繼續下一步,即:執行個體需要獲得資料區塊的使用權。
(先將地址轉換成cache fusion資源---->把該資源提交給DLM---->獲得該資源的使用權)


GRD
1.GRD(Global Resource Directory) 可以看做是一個內部資料庫,記錄每個資料區塊在叢集間的分布圖,位於每個執行個體SGA中,每個執行個體SGA中的GRD匯成了一個完整的GRD。在RAC的master node上記錄了該資源在所有節點上的使用資訊,而每個節點的使用資訊記錄在本節點上。


DRM
1.DRM(Dynamic Resource Management),當一個非MASTER節點的資源被頻繁訪問時,通過DRM就可將該節點提升為master節點,將節點remaster成master節點。
2.通過使用DRM造成的問題:
實驗。。。。。


GCS
1.GCS(Global cache service)全域快取服務:要和cache fusion結合在一起來理解。全域緩衝要設計到資料區塊。全域快取服務負責維護全域緩衝儲存區內的緩衝一致性,確保一個執行個體在任何時刻要修改一個資料區塊時,都可獲得一個全域鎖資源,從而避免另一個執行個體同時修改該塊的可能性。進行修改的執行個體將擁有塊的目前的版本(包括已提交的和未提交的事務)以及塊的前像(post image)。如果另一個執行個體也請求該塊,那麼全域快取服務要負責跟蹤擁有該塊的執行個體、擁有塊的版本是什麼,以及塊處於何種模式。LMS進程是全域快取服務的關鍵組成部分。
2.LMSn(LOCK MANAGER SERCIVE) 負責資料區塊在執行個體間的傳遞,通過參數GCS_SERCER_PROCESSES來控制,預設值是2個,取值範圍為0-20.


GES
1.GES(Global enqueue service)全域佇列服務:主要負責維護字典緩衝和庫緩衝內的一致性。字典緩衝是執行個體的SGA內所儲存的對資料字典資訊的緩衝,用於高速訪問。由於該字典資訊儲存在記憶體中,因而在某個節點上對字典進行的修改(如DDL)必須立即被傳播至所有節點上的字典緩衝。GES負責處理上述情況,並消除執行個體間出現的差異。處於同樣的原因,為了分析影響這些對象的SQL語句,資料庫內對象上的庫緩衝鎖會被去掉。這些鎖必須在執行個體間進行維護,而全域佇列服務必須確保請求訪問相同對象的多個執行個體間不會出現死結。LMON、LCK和LMD進程聯合工作來實現全域佇列服務的功能。GES是除了資料區塊本身的維護和管理(由GCS完成)之外,在RAC環境中調節節點間其他資源的重要服務。
2.LMON
各個執行個體的LMON進程定期通訊,以檢查叢集中各個節點的健康狀態,當某個節點出現故障時,負責叢集重構,GRD恢複等操作,它提供的服務叫做:Cluster Group Services(CGS)。
LMON 主要藉助兩種心跳機制來完成健全狀態檢查:
1-節點間的網路心跳(Network Heartbeat):可以想象成節點定時發送ping包檢查節點狀態,如果能在規定時間內收到回應,就認為狀態正常。
2-通過控制檔案的磁碟心跳(Controlfile Heartbeat);每個節點的CKPT進程每隔3秒更新一次控制檔案一個資料區塊,這個資料區塊叫做Checkpoint Progress Record,控制檔案是共用的,所以執行個體間可以相互檢查對方是否及時更新來判斷。


3.LCK
這個進程負責Non-cache fusion資源的同步訪問,每個執行個體有一個LCK進程。
4.LMD
這個進程負責的是Global Enqueue Service(GES),具體來說,這個進程負責在多個執行個體之間協調對資料區塊的訪問順序,保證資料的一致性訪問。它和LMSn進程的GCS服務還有GRD共同構成RAC最核心的功能CACHE fusion。


Global Resource Directory由Global Cache Service 來管理
記錄資源的模式、資源的角色、block在執行個體中的狀態、在各個活動的節點發布資源的master、在必要的時候重新發布master(例如執行個體的啟動和關閉)


Global Cache Service
1、資源模式,三種
null(預設的)
share(s)(查詢)
exclusive(x)(可以改變block的內容,其他的執行個體就是null mode)。
2、資源角色,兩種
Local:第一次請求資源的初試模式;只有一個執行個體可以有這個block的dirty copy
global:當一個block在多個執行個體中變dirty時,local就變成了Global Block只能由Global Cache Service寫到磁碟中


Cache Fusion Block的傳輸
例如:有ABCD四個節點,Global Cache Service:GCS
1.Read with no transfer
如果c節點需要向共用磁碟檔案上讀一個block,那麼它向Global Cache Service發送請求,這個時候請求被定向到節點D,D是這個BLOCK的MASTER(每個資源都有master)。GCS把資源授權為Share Mode和local Role,在目錄中記錄下了他的狀態(目錄在節點D),然後通知C,C把這個資源從null改成share。C開始I/O,現在C有了這個BLOCK以SHARE模式從磁碟檔案讀取。


2.Read to write transfer
B也要這個block,並且不僅是讀,而且還要改變它的內容。B向D(這個block的master)的GCS發出請求,GCS向C發出請求,要求C把這個block給B,C把block給B,B收到後,告訴GCS,現在B可以修改這個block了。

3.Write to write transfer
A向D節點的GCS發出請求,GCS告訴B節點放棄他的Exclusive鎖,並且把當前的Image傳到A,如果這個請求沒有完成,就會放到GCS的隊列裡。B把這個block傳到A,這個時候要寫Log,強制lg flush,把模式變成null。發送到A並且告訴它這個Exclusive的資源可以用了。A收到這個block的image,會通知GCS並且告訴它block的status是exclusive,這個時候,B不能對這個block做操作,雖然在它的buffer cache中,它還有這個block的copy。

4.Write to read transfer
C要讀這個block,先向D(Master)發出請求,GCS要求A把它傳輸到C,A接受到請求完成它的工作,這可能會在A寫LOG和LOG FLUSH 在發送這個block之前。A會把它的Exclusive鎖降低到share模式。C把從A收到的block的SCN取出來,建設成一個資源Assumption資訊為GCS更新Global Resource Directory。

通過設定參數gc_files_to_locks,可以關閉cache fusion。
cache resource 在一個節點上不在需要繼續master,dynamic Remastering能把它移動到不同的節點。


問題:
1.在所有執行個體都未讀取該塊,而第一個執行個體讀取時,是怎麼加的鎖,加的什麼鎖?如果此時有另一個執行個體也要讀這個塊,幾乎是同時的,那麼oracle如何來仲裁,如何讓其中一個讀取,而另一個再從前者的緩衝中通過cache來得到?
2.如果一個塊已經被其他執行個體讀入,那麼本執行個體如何判斷它的存在?
3.如果某個執行個體改變了這個資料區塊,是否會將改變傳遞到其他執行個體,或者說其他執行個體是否會知道並重新更新狀態?
4.如果一個執行個體要swap out某個塊,而同時其他執行個體也有這個塊的緩衝,修改過的和未修改過的,本執行個體修改的和其他執行個體修改的,如何操作?truncate一張表,drop一張表和單一實例有何不同?
5.應該如何設計應用,以使rac真正發揮作用,而不是引入競爭,導致系統被削弱?
6.RAC下鎖的實現。鎖是在各執行個體的SGA中保留的資源,通常被用於控制對資料庫塊的訪問。每個執行個體通常會保留或控制一定數量與區塊範圍相關的鎖。當一個執行個體請求一個塊時,該塊必須獲得一個鎖,並且鎖必須來自當前控制這些鎖的執行個體。也就是鎖被分布在不同的執行個體上。而要獲得特定的鎖要從不同的執行個體上去獲得。但是從這個過程來看這些鎖不是固定在某個執行個體上的,而是根據鎖的請求頻率會被調整到使用最頻繁的執行個體上,從而提高效率。




1.一個A執行個體讀取塊需要向GCS發送請求,該塊的master執行個體B會通過GCS將資源授權為SHARE MODE ,在master節點B選項組,之後在通知請求的節點A由null改成share,開始I/O,
所以此時請求資源的節點A加的是 SHARE 鎖。如果有另一個執行個體C要讀取該塊,通知master節點B的GCS發出,要求A把block給C。
2.一個執行個體請求塊的時候需要訪問該塊的master節點,此時該塊的master節點就會通過GCS跟蹤擁有該塊的執行個體,該塊的版本是什麼,還有該塊處於什麼模式。在master節點中都有記錄。
3.如果一個執行個體改變了資料區塊,GES的LMON進程中的磁碟心跳機制起作用,每個節點的CKPT進程每隔3秒更新控制檔案的一個資料區塊,控制檔案是共用的,來檢查是否及時更新。
4.查看master節點的該塊的目前狀態。如果修改的塊為寫LOG和LOG FLUSH之前,就會把當前節點擁有的塊由exclusive鎖降低到share鎖。
5.通過GCS和GES來實現。


參考部落格:http://www.cnblogs.com/sopost/archive/2013/03/14/2960490.html
 http://blog.csdn.net/tianlesoftware/article/details/5353087
 《 大話Oracle RAC》


問oracle資料庫RAC是什?

RAC,全稱real application clusters,譯為“即時應用叢集”, 通俗點講就是資料庫叢集

它是Oracle新版資料庫中採用的一項新技術,是高可用性的一種,也是Oracle資料庫支援格線運算環境的核心技術。

優點  Oracle RAC主要支援Oracle9i、10g、11g版本,可以支援24 x 7 有效資料庫應用系統,在低成本伺服器上構建高可用性資料庫系統,並且自由部署應用,無需修改代碼。在Oracle RAC環境下,Oracle整合提供了叢集軟體和儲存管理軟體,為使用者降低了應用成本。當應用規模需要擴充時,使用者可以按需擴充系統,以保證系統的效能。
(1)多節點負載平衡;
(2)提供高可用:故障容錯和無縫切換功能,將硬體和軟體錯誤造成的影響最小化;
(3)通過並存執行技術提高事務回應時間----通常用於資料分析系統;
(4)通過橫向擴充提高每秒交易數和串連數----通常對於聯機事務系統;
(5)節約硬體成本,可以用多個廉價PC伺服器代替昂貴的小型機或大型主機,同時節約相應維護成本;
(6)可擴充性好,可以方便添加刪除節點,擴充硬體資源。

缺點  (1)相對單機,管理更複雜,要求更高;
(2)在系統規劃設計較差時效能甚至不如單節點;
(3)可能會增加軟體成本(如果使用高配置的pc伺服器,Oracle一般按照CPU個數收費)。
在Oracle9i之前,RAC的名稱是OPS (Oracle parallel Server)。RAC 與 OPS 之間的一個較大區別是,RAC採用了Cache Fusion(快取合并)技術。在 OPS 中,節點間的資料請求需要先將資料寫入磁碟,然後發出請求的節點才可以讀取該資料。使用Cache fusion時,RAC的各個節點的資料緩衝區通過高速、低延遲的內部網路進行資料區塊的傳輸。
 
什是oracle的rac?

RAC,全稱real application clusters,譯為“即時應用叢集”, 是Oracle新版資料庫中採用的一項新技術,是高可用性的一種,也是Oracle資料庫支援格線運算環境的核心技術。Oracle RAC
  Oracle RAC主要支援Oracle9i、10g、11g版本,可以支援24 x 7 有效資料庫應用 系統,在低成本伺服器上構建高可用性資料庫系統,並且自由部署應用,無需修改代碼。
  在Oracle RAC環境下,Oracle整合提供了叢集軟體和儲存管理軟體,為使用者降低了應用成本。當應用規模需要擴充時,使用者可以按需擴充系統,以保證系統的效能。
Oracle RAC組件
  在一個應用環境當中,所有的伺服器使用和管理同一個資料庫,目的是為了分散每一台伺服器的工作量,硬體上至少需要兩台以上的伺服器,而且還需要一個共用存放裝置。同時還需要兩類軟體,一個是叢集軟體,另外一個就是Oracle資料庫中的RAC組件。同時所有伺服器上的OS都應該是同一類OS,根據負載平衡的配置策略,當一個用戶端發送請求到某一台服務的listener後,這台伺服器根據我們的負載平衡策略,會把請求發送給原生RAC組件處理也可能會發送給另外一台伺服器的RAC組件處理,處理完請求後,RAC會通過叢集軟體來訪問我們的共用存放裝置.
  邏輯結構上看,每一個參加叢集的節點有一個獨立的instance,這些instance訪問同一個資料庫。節點之間通過叢集軟體的通訊層(communication layer)來進行通訊。同時為了減少IO的消耗,存在了一個全域快取服務,因此每一個資料庫的instance,都保留了一份相同的資料庫cacheI
  RAC中的特點是:
  每一個節點的instance都有自己的SGA
  每一個節點的instance都有自己的background process
  每一個節點的instance都有自己的redo logs
  每一個節點的instance都有自己的undo資料表空間
  所有節點都共用一份datafiles和controlfiles
  還提出了一個緩衝融合的技術(Cache fusion)
  目的有兩個
  01.保證緩衝的一致性
  02.減少共用磁碟IO的消耗
  因此在RAC環境中多個節點保留了同一份的DB CACHE
  緩衝融合(Cache fusion)工作原理:
  ****************************************
  01.其中一個節點會從共用資料庫中讀取一個block到db cache中
  02.這個節點會在所有的節點進行交叉db block copy
  03.當任何一個節點緩衝被修改的時候,就會在節點之間進行緩衝修改
  04.為了達到儲存的一致最終修改的結果也會寫到磁碟上
  ClusterWare組件
  *******************
  四種Service
  Crsd - 叢集資源服務
  Cssd - 叢集同步服務
  Evmd - 事件管理服務
  oprocd - 節點檢測監控
  三類Resource
  VIP - 虛擬IP地址(Virtual IP)
  OCR - Oracle Cluster Registry(叢集註冊檔案),記錄每個節點的相關資訊
  Voting Disk - Establishes quorum (表決磁碟),仲裁機制用於仲裁多個節點向共用節點同時寫的行為,這樣做是為了避免發生衝突。
  RAC的組件
  ......餘下全文>>
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.