Recovery Interval** 控制 SQL Server 將髒頁保留在記憶體的最長時間,間接決定 Checkpoint 頻率與故障復原時間 (RTO)。
運作機制
- 用戶修改資料 → 記憶體修改 + 記錄檔寫入 (WAL)。
- 髒頁暫留記憶體 (利用局部性原則減少磁碟寫入)。
- 若系統崩潰,SQL Server 從記錄檔重做 (Redo) 未寫入磁碟的操作。
- Recovery Interval** 設定上限:預估 Redo 時間不得超過此值。
- 當預估 Redo 時間逼近上限 → 背景執行緒觸發 Checkpoint 刷新髒頁。
預設值與調整
- 預設 **1 分鐘** (實際約 1 分鐘內)。
- 設定範圍:0-32767 分鐘 (0 = 自動)。
EXEC sp_configure 'recovery interval', 5; RECONFIGURE; 設為 5 分鐘。
權衡考量
| 設定值 | 優點 | 缺點 |
| 較大 (如 10-30 分鐘) | 髒頁留存久 → 磁碟寫入少 → 正常負載效能佳 | 崩潰後復原久 (RTO 長);記憶體壓力大時可能突發大量寫入 |
| 較小 (如 1 分鐘) | 復原快 (RTO 短) | Checkpoint 頻繁 → 背景寫入 IO 佔用高 → 可能影響尖峰效能 |
最佳實務
- 一般 OLTP 保持預設或 5 分鐘即可。
- 大型資料倉儲、批次載入窗口可暫時調大 (如 30 分鐘) 減少 Checkpoint 干擾。
- SQL Server 2012+ 建議改用資料庫層級
TARGET_RECOVERY_TIME (秒),精確控制個別資料庫 RTO:
ALTER DATABASE YourDB SET TARGET_RECOVERY_TIME = 60 SECONDS;
- 監控
Performance Monitor → SQL Server:Buffer Manager → Checkpoint pages/sec 觀察 Checkpoint 活動。
- 上一篇文章: SQL Server 災難恢復:重建歷史資料的三條路徑
- 下一篇文章: SQL Server Processor Affinity (處理器親和性) 設定詳解
Copyright ©
程式碼之家 All Rights Reserved