什麼是 Checkpoint?
在資料庫系統中,寫入交易記錄與寫入資料檔是兩大 I/O 消耗操作。為確保效能,資料庫採用 WAL (Write-Ahead Logging) 機制:提交前必須先將記錄寫入記錄檔(循序寫),而髒頁則暫留於緩衝區,稍後批次寫入資料檔(分散寫)。
當資料庫異常關閉,緩衝區髒頁可能未寫入磁碟,啟動時需透過記錄檔進行恢復。Checkpoint 即為此恢復過程的關鍵基準點,決定恢復時需掃描並重做哪些記錄。
Checkpoint 觸發與運作
- 由 CKPT 進程發出事件,DBWn 將髒頁寫入磁碟。
- 同步更新資料檔與控制檔檔頭的 Checkpoint 資訊。
- 類比 Word 自動存檔:定期將記憶體修改持久化,縮短災難恢復時間。
兩大核心作用
- 保證一致性:將髒資料落盤,確保記憶體與磁碟資料一致。
- 縮短恢復時間:減少需重做的記錄量,加快實例啟動恢復速度。
Checkpoint 分類
- 完全檢查點:將所有髒頁寫入磁碟。
- 增量檢查點:僅寫入上次檢查點後變更的髒頁,效能較佳。
關鍵術語:RBA、LRBA、HRBA
RBA (Redo Byte Address) 為重做記錄塊在記錄檔中的位址,由三部分組成:
- 記錄檔序號 (4 bytes)
- 記錄檔區塊編號 (4 bytes)
- 記錄在區塊中的起始位移 (2 bytes)
- LRBA (Low RBA):緩衝區某髒頁首次被修改時產生的重做記錄位置。
- HRBA (High RBA):該髒頁最近一次被修改時產生的重做記錄位置。
恢復時,系統掃描從 LRBA 到 HRBA 之間的重做記錄,將資料頁恢復至崩潰前狀態。
總結
Checkpoint 是資料庫耐久性與恢復效能的平衡機制。理解其原理有助於調整恢復間隔、規劃記錄檔大小、優化備份策略。