Oracle RAC Cache Fusion 系列一:基礎概念

沃趣科技發表於2019-04-04

從本章節開始,我將嘗試由淺至深的和大家一起探索Oracle RAC的其中一核心技術-Oracle Cache Fusion,看看多個例項場景下,事務是如何併發執行的。在瞭解多例項場景前,我們還是非常有必要一起了解一些重要的概念及在單例項情況下Oracle是如何控制併發事務執行的。


為了實現事務併發執行時的資料一致性問題,資料庫研究人員定義了一個稱為可序列化的事務隔離模型。可序列化事務在一個環境中執行時,做到使其看起來好像沒有其他使用者在修改資料庫中的資料。但這會帶來新的問題,以可序列化模式執行許多應用程式時會嚴重損害應用程式TPS和吞吐。這種併發執行事務的完全隔離可能意味著一個事物無法執行插入另一個事物查詢的表。所以這就要求我們在完美的事物隔離和效能之間進行折中取捨,Mysql提供多種事物隔離方式及多種儲存引擎,讓使用者根據自己的業務型別、操作特點去自由選擇。而Oracle則透過引入自己的多版本一致性模型和各種型別的鎖和事務以實現效能和事物隔離的“最優解”。透過這種方式,資料庫可以向多個併發使用者展現對應版本的資料,所有版本的資料與時間點保持一致。透過實現不同版本的資料塊同時存在,實現事務可以讀取在查詢所需的時間點提交的資料版本,並返回與單個時間點一致的結果。


資料塊的持有模式:

NULL: null CR模式表示資源的持有者沒有訪問許可權。對應的記憶體空間可以被重用,主要用於資料字典物件。

Exclusive: XCUR獨佔模式表示塊的獨佔訪問。這意味著資源持有者需要對塊執行寫操作,而其他資源無法對塊進行寫操作。但是,其他資源可以對塊執行讀取操作。

Shared: SCUR共享模式表示資源持有者在塊上具有共享鎖,並且正在執行讀取操作。顧名思義,由於鎖是共享的,所以任何其他資源也可以讀取該塊。


資料塊的角色:

Local: 當塊被讀取到例項的快取中,並且群集中沒有其他例項讀取相同的塊或已將其包含在其快取中時,則該塊被賦予的角色就是本地角色。

Global: 如果先前具有本地角色的資料塊,這時它被請求傳送給其他例項或者從其他例項接收,則該塊就被賦予了全域性角色。

記憶體資料塊的狀態:

free:當前未使用

xcur:當前獨佔

scur:當前共享

cr:一致性讀

read:正在從磁碟讀

mrec:正在做介質恢復

irec:正在做例項恢復


操作型別:

讀CR塊

從硬碟讀出當前塊,然後透過undo段構造出需要的資料塊,CR塊不需要加鎖。

讀當前塊

直接從硬碟中讀取SCN最新的資料塊,資料塊的持有模式為:SL0(shared,local,non-piblock) 

寫當前塊

直接從硬碟讀出SCN最新的資料塊,資料塊的持有模式為:XL0(exclusive, local,non-pi block)


SCN:

1.是Oracle資料庫使用的邏輯內部時間戳

2.Oracle透過為塊的每個版本分配數字識別符號來記錄對資料塊所做的每個更改。

3.使Oracle能夠有序地生成重做日誌,並適應後續的恢復處理

4.SCN排序資料庫中發生的事務。

5.每個事務都有一個對應的SCN。


崩潰恢復:

意味著所有例項都已失敗,因此它們都需要恢復。

對於單個例項和RAC環境,崩潰恢復基本相同,對於單個例項, 以下是恢復過程:

磁碟塊是恢復的起點,Oracle只會考慮磁碟上的塊,因此恢復很簡單。使用當前或活動的redo日誌會自動進行崩潰恢復,起點是最後一個完整的檢查點。 起始點由控制檔案提供,並與資料檔案頭中的相同資訊進行比較,只需要應用更改。如果塊具有與重做記錄(SCN匹配)相同的時間戳,則重定義中指定的塊將被讀入快取記憶體。對應的RAC例項恢復後續文章會介紹到。


資料的一致性維護:

單個例項資料庫,每當使用者查詢資料時,他都會獲得一致的資料“檢視”。例如,另一個使用者已經讀取了一個資料塊並更改了緩衝區快取(buffer cache)中的某些行。如果另一個使用者想要讀取來自相同資料塊的資料,則Oracle將在緩衝區快取記憶體中複製該資料塊,並應用undo表空間中存在的undo資訊以獲得一致的資料“檢視”。然後將該一致“資料”呈現給想要讀取資料的使用者。

多版本一致性模型:

多版本一致性模型區分當前版本的資料塊和讀取一致版本的資料塊。當前塊一般指的是包含所有更改,已提交以及未提交的更改的塊。

示例:

假設現在需要在例項中不存在的資料塊上觸發DML。那麼,此塊將從磁碟讀取到緩衝區快取中,並且對應的記錄將被更改。接著,使用者在同一資料塊上提交併觸發另一個DML。現在該資料塊是髒的,包含已提交和未提交的更改。假設另一個使用者請求讀取該資料塊,那麼Oracle將複製並應用undo資訊製作該塊的一致讀“CR”副本並將其傳送給請求的使用者。因此,我們有相同資料塊的多個版本,每個版本都與請求的使用者一致。在操作過程中,可以有更多版本的相同資料塊,每個版本都與某個時間點一致。


未完待續……


| 作者簡介

劉金龍·沃趣科技高階資料庫技術專家

多年Oracle海量資料以及高併發資料庫管理工作經驗,主要負責Oracle資料庫產品及售後二線支撐。精通Oracle 11g及12c內部執行機制,有豐富的基於全方位技術棧的資料庫及RAC叢集層故障診斷、效能調優、OWI、資料庫備份恢復及遷移經驗。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28218939/viewspace-2640374/,如需轉載,請註明出處,否則將追究法律責任。

相關文章