GRD中記錄PCM lock的信息,它位于每個實例的SGA中,但每個實例都僅含部分GRD、所有實例的GRD匯總在一起才是一個完整的GRD
GRD中記錄PCM lock的信息
它位于每個實例的SGA中
但每個實例都僅含部分GRD、所有實例的GRD匯總在一起才是一個完整的GRD
PCM lock有3個主要屬性:Mode、Role、PI
① Mode
--S
--X
--NULL
對于S,X兩種鎖模式這里不再贅述
而NULL代表對應的內存空間可以被重用、在沒有被重用之前、實例是不能訪問這里的數據
② Role
Role這個屬性是用來描述“臟塊”在集群間的分布狀況
注意,“臟”只是用來描述數據塊的內存版本和磁盤版本是否一致、和事務沒有關系
Role有兩個取值:Local和Global
⑴ 對于Local Role、Mode只會是S或X:
Ⅰ 如果Mode是S,則該數據塊內存版本和磁盤版本一致
Ⅱ 如果Mode是X, 則該數據塊內存版本和磁盤版本不同
當擁有Local Role和X Mode的實例給其他實例發送數據塊:
Ⅰ 如果接收方收到的也是和磁盤一致的版本的,那么本實例(發送方)仍然保持Local Role
Ⅱ 如果接收方收到的和磁盤版本不一致,那么發送方和接收方的角色就要轉換成Global
⑵ 對于Global Role、Mode可以是S、X、或NULL
Global Role意味著一個“臟塊”同時被多個實例擁有
如果想要把這個“臟塊”flush到磁盤,必須要聯系GRD,讓擁有該塊Current版本的實例完成寫動作
但對于擁有Local Role的實例而言,如果要把“臟塊”flush到磁盤,不需要聯系GRD,由本實例完成即可
③ Past Image
下面通過例子說明什么是Past Image
假設一個2節點的RAC集群,塊_A在磁盤上的SCN=1
1)node1要修改塊_A,從磁盤讀入SGA進行修改,修改后塊_A在內存中的SCN=2
2)node2也要修改塊_A,,node1就會通過cache fusion把塊_A傳送給node2,傳的是SCN=2的版本,
即Current copy的數據塊,這時node1還是會保留這個SCN=2的塊在SGA中,但是不能再進行任何修改
這時node1擁有的這個Image就叫做“Past Image”
在node1發送Current copy之前,會先把相應的redo entry flush到redo log
3)node2修改這個數據塊,修改后SCN=3,但磁盤的版本仍然是SCN=1
4)如果node1發生檢查點事件,因為node1上塊_A是“臟塊”,所以塊_A必須被同步到磁盤
5)node1會聯系GRD,發現node2擁有塊_A的Current版本,GRD會通知node2把這個塊寫入磁盤
6)node2完成寫之后,會通知所有擁有PI版本的實例釋放他們所擁有的PI內存
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com