1. 程式人生 > >SQL Server 2017 AlwaysOn AG 自動初始化(九)

SQL Server 2017 AlwaysOn AG 自動初始化(九)

創建快照 版本 int ima img ado 需要 PE 可用性組

SQL Server VDI備份原理分析


SQL Server提供了虛擬設備接口(VDI)API,用於幫助獨立的應用程序提供商,支持將SQL Server的備份和恢復操作集成到他們的產品中。這些API設計為提供最大可靠性和性能,支持所有的備份和恢復功能,包括所有的熱備和快照備份能力。


在早期SQL Server版本,VDI備份需要3個線程來完成備份。一個控制線程來接收備份命令,兩個輔助線程來處理VDI完成和元數據流活動。


需要的VDI線程數 = (文件在卷上的數據庫數) * 3


技術分享圖片

而在新的SQL Server 2017測試過程中,發現單個數據庫線程數為12個,如下:

技術分享圖片


VDI備份的步驟如下:

步驟1:加載SQLWriter(VSS Object)。

步驟2:SQLWriter枚舉所有數據庫文件位置,確定文件在卷上的數據庫列表。

步驟3:對於列表中的所有數據庫執行SQLWriter快照備份命令。


在快照備份創建階段:

a) SQLWriter告訴SQL Server準備快照備份。

b) 然後所有被備份的數據庫被凍結,然後創建快照。(註:VDI消費者執行生成安全的卷快照的行為。有的解決方案比如SQL Server快照備份啟用寫入時復制(Copy On Write)行為,其他的解決方案分裂出物理鏡像和其他硬件提供商提供的技術)

c) 一旦完成,I/O恢復,這個進程叫解凍。

該過程詳見SQL Writer in SQL Server 2005


寫入時復制(Copy On Write):

當創建一個快照時,僅復制原始卷中數據的元數據metadata,並不會有數據物理操作,因此快照創建過程非常快。當快照創建完成,原始卷上有寫操作時,快照會跟蹤原始卷塊的改變,將要改變的數據在改變之前復制到快照預留空間裏,因此這個原理的實現叫寫時復制。對於快照讀取操作,如果讀取的數據塊是創建快照後沒有修改過的,那麽會重定向讀取操作到原始卷,如果讀取的是已經修改過的塊,讀取保存在快照中該塊在原始卷改變之前的數據,簡單來將就是讀取快照中的數據,因此采用寫時復制機制保證了讀取快照得到的數據和快照和快照創建時一致。


測試創建自動種子設定的可用性組時,在VDI備份過程中,執行手工日誌備份、Checkpoint、INSERT操作都能完成。




SQL Server 2017 AlwaysOn AG 自動初始化(九)