Transaction-Log

事務管理

  • April 13, 2015

在檢查點之前開始的未送出事務會發生什麼。他們是否必須重做,因為他們被檢查點期間打斷了?只是想澄清任何誤解。

未送出的事務不會受到checkpoint的影響,下面是checkpoint發生時依次發生的操作

  1. 寫入日誌記錄以指示檢查點的開始

  2. 所有臟頁,無論已送出或未送出的事務都被刷新到磁碟(這樣做是為了最大限度地減少崩潰恢復期間需要花費的工作量) 3. 檢查點也跟踪在該時間點處於活動狀態的事務並記錄那些 lsn 編號

  3. 寫入指示檢查點結束的日誌記錄

假設以下交易順序

T1 開始 t2 開始 t3 開始 t1 完成 檢查點開始 檢查點完成 t3 完成

所以如果數據庫現在要崩潰,崩潰恢復就會出現,SQL從最後一個檢查點開始分析,並構造由未送出事務組成的髒頁表。

假設如果檢查點不存在,SQL 必須讀取更多事務日誌,並且 SQL 知道受事務影響的頁面是否已送出或未送出都持久化到磁碟,因此在 REDO 階段不需要再次將事務前滾到數據庫中,數據庫可以在重做階段上線(僅限企業版)。我建議進一步閱讀

https://technet.microsoft.com/en-us/magazine/2009.02.logging.aspx

未送出的事務僅在備份期間讀取數據庫頁面完成之前未完成時才會回滾。

更多資訊請參見 paul

http://www.sqlskills.com/blogs/paul/more-on-how-much-transaction-log-一個完整的備份包括/

檢查點不會影響未送出的事務。檢查點將發生,任何臟頁都將被寫入磁碟,無論它們是否已送出。

引用自:https://dba.stackexchange.com/questions/97648