首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server CheckPoint 常見誤區澄清:資料庫級、非並行、髒頁全寫入

     編輯:關於SqlServer

CheckPoint 是資料庫引擎核心背景程序,但廣為流傳的認知多有偏差。本文針對四大誤區,以實驗與原理解析正本清源。

誤區一:CheckPoint 是實例級別

事實:CheckPoint 以資料庫為粒度執行。每個資料庫維護獨立的 CheckPoint LSN、髒頁清單。實例級設定 (recovery interval) 僅控制目標恢復時間,實際執行時逐個資料庫推進。

實驗:兩連線分別操作不同資料庫產生髒頁,對資料庫 A 執行 CHECKPOINT,僅 A 的髒頁寫入磁碟,B 的髒頁仍駐留 Buffer Pool。

CheckPoint 資料庫級別驗證

誤區二:自動 CheckPoint 會寫入所有資料庫髒頁

事實:自動 CheckPoint (依 recovery interval 觸發) 僅針對有髒頁且估計恢復時間超過目標的資料庫執行。閒置資料庫不會被掃描。

誤區三:CheckPoint 僅寫入已 Commit 的髒頁

事實:無論交易是否 Commit,髒頁皆會被 CheckPoint 寫入磁碟 (WAL 保證 Redo/Undo 能力)。未 Commit 的修改寫入資料檔後,若交易回滾,恢復階段會透過記錄檔 Undo 還原。

驗證:見部落格文章「再談 SQL Server 中記錄檔的作用」中 CheckPoint 實驗。

誤區四:多資料庫 CheckPoint 並行執行

事實:串行執行。啟用追蹤旗標 3502 可見同一 SPID 依序輸出各資料庫 CheckPoint 訊息。

Trace 3502 顯示串行 CheckPoint

CheckPoint 類型總覽

DBA 實務建議

  • 設定 Target Recovery Time (SQL 2012+) 取代 recovery interval,單位秒,直觀控制 RTO。
  • 大量載入資料前手動 CHECKPOINT 可減少載入過程中自動 CheckPoint 干擾。
  • 監控 sys.dm_db_log_space_usage 中 log_since_last_checkpoint_mb,評估 CheckPoint 頻率是否合理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類型觸發條件範圍備註
Automatic恢復間隔超標單一資料庫背景執行緒
Indirect目標恢復時間 (Target Recovery Time) 配置單一資料庫SQL 2012+,更精確控制
ManualCHECKPOINT 命令當前資料庫同步/非同步可選
Internal備份、資料庫檔案操作、AlwaysOn 截斷等單一資料庫內部必要動作