資料庫崩潰重啟時,必須確保「已提交交易持久化」、「未提交交易回滾」。UNDO LOG 記錄了資料修改前的舊值,回放過程需從後向前掃描,直到找到 COMMIT 點。但多併發交易環境下,COMMIT 點不止一個,如何定義回放邊界?
Checkpoint 如同一道「大柵欄」,將恢復邊界固化:
從日誌尾部向前掃描:
IF 先遇到 END_CKPT:
-- 代表 CREATE_CKPT 中記錄的交易已全部完成
僅需回放至 CREATE_CKPT 處,之前日誌可丟棄
ELSE IF 先遇到 CREATE_CKPT:
-- 代表記錄中的交易可能尚未完成
為保證 Global Serializability,
回滾至 T1~Tn 中最早開始的那筆交易之前
(因為該交易之前的所有資料已確保 COMMIT)
LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT、FAST_START_MTTR_TARGET 參數控制恢復時間目標(MTTR)。UNDO LOG 回放的核心難題在於「如何在併發環境下劃定一致性邊界」。Checkpoint 機制以極低成本解決此問題,是現代關聯式資料庫實現快速崩潰恢復的基石。理解其原理,有助於 DBA 調整 Checkpoint 相關參數,平衡「正常運作效能」與「故障恢復速度」。