CHECKPOINT(檢查點) 是 SQL Server 將記憶體緩衝區(Buffer Pool)中「髒頁」——即已修改但未寫入磁碟的資料頁——強制刷新至資料檔(.mdf/.ndf)的關鍵機制。它是資料庫恢復模型、備份效能、關機速度的核心影響因子。

CHECKPOINT [ checkpoint_duration ]
-- checkpoint_duration:int,>0,單位秒。指定嘗試完成檢查點的目標持續時間。
-- 省略時:引擎自動調整持續時間,平衡 IO 衝擊與恢復時間
| 觸發條件 | 說明 | 影響範圍 |
|---|---|---|
| 資料庫備份前 | 完整/差異/檔案備份開始前自動檢查點 | 該資料庫 |
| 作用中日誌超過恢復間隔 | 日誌記錄量超過 recovery interval 設定可在指定時間內恢復的大小 | 該資料庫 |
| 日誌 70% 滿且處於截斷模式 | 簡單恢復模式下,滿足:最後備份後發生最小日誌大量操作、WRITETEXT、ALTER DATABASE 加減檔案 | 該資料庫 |
| 正常關閉 SQL Server 服務 | 透過組態管理器、SSMS、SHUTDOWN 命令關閉 | 所有線上資料庫 |
-- 檢視目前設定(預設 0 = 自動,約 1 分鐘)
EXEC sp_configure 'recovery interval';
-- 設定為 2 分鐘(需進階選項)
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'recovery interval', 2; RECONFIGURE;
1~5 分鐘,視 RTO 需求與 IO 子系統能力調整-- 手動觸發當前資料庫檢查點
CHECKPOINT;
-- 監控檢查點相關效能計數器
SELECT * FROM sys.dm_os_performance_counters
WHERE counter_name LIKE '%checkpoint%';
針對特定資料庫設定目標恢復時間(TARGET_RECOVERY_TIME),引擎動態調整 Checkpoint 頻率以滿足 SLA,比實例層級 recovery interval 更精準:
ALTER DATABASE MyDB SET TARGET_RECOVERY_TIME = 30 SECONDS;
CHECKPOINT,信任自動機制Log Flushes/sec、Checkpoint pages/sec 觀察 IO 模式BULK INSERT、bcp、SELECT INTO),使用簡單恢復模式或最小日誌模式減少 Checkpoint 壓力CHECKPOINT 加速後續啟動