(2.4)備份與還原--WAL與備份原理


預寫式日志(Write-Ahead Logging (WAL))

 部分轉自:http://www.cnblogs.com/wenBlog/p/4423497.html

     SQL Server中使用了WAL(Write-Ahead Logging)技術來保證事務日志的ACID特性。而且大大減少了IO操作。

     WAL的核心思想是:在數據寫入到數據庫之前,先寫入到日志.再將日志記錄變更到存儲器中。

        SQL Server修改數據的步驟

     1.在SQL Server的緩沖區的日志中寫入”Begin Tran”記錄

     2.在SQL Server的緩沖區的日志頁寫入要修改的信息

     3.在SQL Server的緩沖區將要修改的數據寫入數據頁

     4.在SQL Server的緩沖區的日志中寫入”Commit”記錄

     5.將緩沖區的日志寫入日志文件

     6.發送確認信息到客戶端(SMSS,ODBC等)

     7.將緩沖區內的頁寫入到磁盤(Lazy Writer或CheckPoint在這點之前開始)

 

 (1)預寫式事務的工作原理

  需要修改數據時,SQL Server先將數據所在的數據頁面讀入到內存的緩沖區,然后修改緩沖區里面的數據並記錄到日志文件中,最后再周期性地將“臟頁”回寫到硬盤上的數據頁面。

  一般情況下,是由檢查點(Checkpoint)負責回寫“臟頁”。

 

 

 

(2)預寫事務日志對性能的影響
WAL機制使事務日志的物理文件(一般擴展名為LDF)基本上一直處於一種連續的、小數據量的寫入操作。數據頁面的數據修改平時存放在內存的緩沖池中,只在某些時候(例如,遇到檢查點)才被批量寫入到磁盤。這種機制有助於提升數據庫系統的性能。
(3)事務日志對可靠性的影響
即使數據文件損壞了,還可以在事務日志中找到其記錄的歷史事務,通過重做(redo)事務日志實現數據恢復。因此,事務日志有助於將數據丟失的風險降到最低。

 

 

     本篇着重介紹將緩沖區的數據頁寫入到磁盤的兩個過程:CheckPoint和Lazy Writer。 
     當事務遇到Commit時,僅僅是將緩沖區的所有日志頁寫入磁盤中的日志文件;而直到Lazy Writer或CheckPoint時,才真正將緩沖區的數據頁寫入磁盤文件。

     CheckPoint:系統會按照恢復間隔 SQL Server 配置選項確定的間隔自動發出檢查點。 Checkpoint 方法會立即發出檢查點,而無論恢復間隔設置為何。

      這個CheckPoint的間隔是一個服務器級別的參數。可以通過sp_config進行配置,也可以在SSMS中進行配置:image

需要注意的是CHECKPOINT 權限預設會授予系統管理員 (sysadmin) 固定伺服器角色及 db_owner 與 db_backupoperator 固定資料庫角色的成員,並不可加以轉讓。更短的恢復間歇意味這更短的恢復時間和更多的磁盤IO,而更長的恢復間歇則帶來更少的磁盤IO占用和更長的恢復時間.

checkpoint的觸發條件(深入了解checkpoint出發條件:checkpoint的誤區

1. 自上次檢查點后產生大量日志

2. 服務實例關閉

3. 數據庫完整備份或差異備份(日志備份不會觸發checkpoint)

4. 數據庫恢復模式為簡單恢復模式下當日志文件使用超過70%時

Lazy Writer:lazywriter是一個系統進程,其主要任務是成批刷新老化的臟緩沖區(指包含更改的緩沖區,這些更改必須寫回磁盤,才能使該緩沖區由其它頁重新使用),並使之可由用戶進程使用。

lazywriter的觸發條件

1. 緩存區內可用空閑緩存塊數據不足

2. Windows系統內存壓力

區別:

      Checkpoint目的是減少數據庫的恢復時間(服務奔潰或重啟服務后的恢復),而Lazy writer的目的是保證SQL OS 有空閑緩存塊和系統有一定可用內存。

      Checkpoint和LazyWriter都會將緩沖區內臟頁寫入到磁盤;

      LazyWriter會更新緩存區空閑可用列表,而checkpoint不會;

      Checkpoint操作會被記錄到數據庫日志中,而lazywriter不會;

      通過指定CheckPoint后的參數,SQL Server會按照這個時間來完成CheckPoint過程,如果時間指定的短,則SQL Server會使用更多的資源優先完成CheckPoint過程。

      通常情況下,將“臟”頁寫入磁盤的工作,Lazy Writer要做的比CheckPoint會多出許多。

 

 

 

2.備份

  (1)完整備份    

完整備份包含了數據庫中的所有數據,以及可以恢復這些數據的足夠的日志(以便恢復到該備份的結尾)。
1. 備份的過程
(1)鎖定數據庫,阻塞所有的事務。
(2)在事務日志中放置一個標志1。
(3)釋放數據庫鎖。
(4)提取數據文件的所有包含數據的數據頁面,把它們寫入備份設備。不包含數據的數據頁面被跳過,因此備份的文件大小永遠不會大於該數據庫的數據文件。
(5)鎖定數據庫,阻塞所有事務。
(6)在事務日志中放置一個標志2。
(7)釋放數據庫鎖。
(8)提取標志1與標志2之間的所有事務,把它們追加到備份中。

 

 

 

 

總結

    本文簡單介紹了WAL的概念和最終實現數據實際修改的兩種方法。介紹了CheckPoint和Lazy Writer,同時對比了兩種方法的機制和觸發條件,這對我們將來進一步講解事務日志的基本原理和恢復機制提供了良好的基礎。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM