檢查點做什麼?
將緩衝區中所有髒頁 (已修改未寫入磁碟) 強制刷新至資料檔,包含已認可與未認可的變更。同時將快取的記錄刷新至記錄檔。類似「鬧鐘」定時喚醒 Data Writer / Log Writer 執行寫入。
觸發檢查點的事件
- 資料庫備份 (完整/差異/記錄)
- 手動執行
CHECKPOINT 指令
- 關閉資料庫
ALTER DATABASE 指令
- 自動檢查點 (依
recovery interval 設定或記錄檔達 70% 滿)
- 間接檢查點 (SQL 2012+ 新特性,可針對特定資料庫設定目標復原時間)
三大寫入進程比較
| 進程 | 目的 | 觸發條件 | 是否釋放記憶體 |
| Checkpoint | 縮短啟動復原時間,標記復原起始點 | 時間間隔、記錄檔滿 70%、備份等 | 否 (僅刷新髒頁副本) |
| Lazy Writer | 釋放緩衝區空間 (LRU 演算法) | 記憶體壓力、定期掃描 | 是 (釋放乾淨頁) |
| Eager Writer | 支援大量插入 (BCP/SELECT INTO) 並行寫入 | 最小記錄操作、大量載入 | 視情況 |
檢查點與 LSN (Log Sequence Number) 關係
- 檢查點開始時,在記錄檔寫入 Begin Checkpoint LSN
- 髒頁刷新完成,寫入 End Checkpoint LSN
- 記錄 MinLSN (最小復原 LSN):標示最早仍需保留的記錄位置,供 Rollback/Undo 使用。MinLSN 必須存在於檢查點記錄中,才能保證回滾操作能找到對應的前映像。
後續文章將詳細闡述 LSN 結構、MinLSN 計算邏輯、VLF (Virtual Log Files) 管理與記錄檔截斷機制。
- 上一篇文章: SQL Server 取得多欄位中的最大值與最小值
- 下一篇文章: SQL 基礎語法完整指南:DQL/DML/DDL、條件查詢、排序、聚合、分組、JOIN、子查詢與特殊排序
Copyright ©
程式碼之家 All Rights Reserved