1

當Sql Server發出一個檢查點時,是否會阻止每一個其他操作,直到檢查點完成?檢查站是否阻止其他操作?

如果我理解正確,發生檢查點時,服務器應寫入所有髒頁。

完成後,它會將檢查點寫入事務日誌,因此如果發生任何故障,它將只處理該時間點的事務(或在檢查點時已經開始的事務)。

sql server如何防止某些非髒頁面在檢查點進行時變髒?

是否阻止所有寫入,直到檢查點完成?

+0

你有沒有做過任何研究? – Rob

+0

@Robuust我編輯了我的問題。 – Marka

回答

2

檢查點不會阻止寫入。

檢查點有一個開始和結束LSN。它保證磁盤上的所有頁面至少在檢查點的開始LSN處。如果任何頁面位於稍後的LSN(因爲在檢查點開始之後已經寫入),這並不重要。

檢查點只保證磁盤上所有頁面的最小LSN。它不能保證一個確切的LSN。

這很有意義,因爲您可以刪除所有包含早於檢查點開始LSN的LSN信息的事務日誌記錄。這是檢查點的目的:允許部分日誌變爲非活動狀態。

數據一致性和正確性不需要檢查點。他們只需釋放日誌空間並縮短恢復時間。

1
當一個檢查點時

,服務器應該寫所有髒頁

這就是它做什麼。然而,由檢查點給出的保證是它在檢查點開始的時刻寫入所有髒的頁面。在檢查點正在進行時變髒的任何頁面可能寫或不寫,但肯定不是保證被寫入。這種保證提供的優化是物理恢復可以從上一個檢查點開始REDO,因爲之前日誌中的所有內容都已經應用到數據頁面(不必重做)。甚至在Wikipedia page for ARIES

的檢查點用簡單的方式涉及到整個數據庫鎖定,以避免 創建 檢查點的過程中更改DPT和TT。模糊記錄通過編寫兩個日誌記錄來避開這種情況。 一個模糊記錄在此處開始記錄,並且在準備檢查點數據之後記錄實際檢查點。兩個記錄之間的其他的LogRecords 可以創建

USR的回答解釋了這是如何實現(通過使用一個檢查點開始LSN和結束LSN)。

相關問題