交易記錄檔核心角色
記錄資料庫所有變更操作,獨立儲存於 .ldf 檔案。每筆交易從開始到 COMMIT/ROLLBACK 完整記錄,支援:
- 復原:將資料檔恢復至交易前狀態 (Undo) 或重做已提交交易。
- 異動複寫:記錄檔為複寫來源。
- 高可用性:Log Shipping、Database Mirroring、AlwaysOn 依賴記錄檔傳送。
運作機制:寫入緩衝與檢查點
- 資料修改先寫入記憶體緩衝區 (Buffer Pool)。
- 記錄檔同步寫入 (Write-Ahead Logging, WAL),確保持久性。
- 檢查點 定期將髒頁刷新至資料檔,並在記錄檔標記檢查點 LSN。
- 服務重啟時,從最新檢查點向前重做、向後回復未提交交易。
維護管理:避免記錄檔失控增長
1. 定期記錄檔備份 (完整/大量記錄復原模式)
備份會截斷非作用中虛擬記錄檔 (VLF),標記為可重複使用,防止檔案無限增長。
2. 簡單復原模式
每次檢查點自動截斷記錄檔,無法進行時間點還原,適合測試/唯讀環境。
3. 壓縮記錄檔 (DBCC SHRINKFILE)
截斷釋放邏輯空間,壓縮才釋放物理磁碟空間:
DBCC SHRINKFILE (N'MyDB_Log', 100) -- 壓縮至 100MB
-- 或資料庫層級
DBCC SHRINKDATABASE (MyDB, 10)
建議離峰執行,避免影響生產效能。自動壓縮 (AUTO_SHRINK) 生產環境不建議開啟。
資料庫還原策略
- 還原完整備份 (
WITH NORECOVERY)。
- 依序還原差異備份 (
WITH NORECOVERY)。
- 依時間順序還原所有記錄檔備份 (
WITH NORECOVERY),最後一筆 WITH RECOVERY 完成上線。
- 時間點還原:
RESTORE LOG ... WITH STOPAT = 'YYYY-MM-DD HH:MM:SS'。
Log Shipping 災難復原架構
- 主伺服器定期備份記錄檔 → 複製至備援伺服器 → 自動還原 (
STANDBY 模式可唯讀查詢)。
- 監視伺服器偵測傳送間隔超時,記錄事件日誌發出警示。
- 適合異地備援、報表卸載、資料庫遷移。
效能優化三大原則
- 記錄檔置於獨立磁碟:連續寫入特性,獨立 RAID 1/10 磁碟可最大化吞吐量,避免與資料檔隨機 I/O 爭用。
- 合理設定初始大小與成長增量:預先配置足夠空間 (如預估日增長 1GB,初始 10GB,增量 512MB),避免頻繁自動成長造成效能抖動與碎片。
- 監控 VLF 數量:過多 VLF (
DBCC LOGINFO) 會拖慢啟動復原、備份還原、複寫讀取。適當壓縮後重建記錄檔可減少 VLF。
常見錯誤迷思
- ❌ 定期
TRUNCATE_ONLY / NO_LOG 替代備份 → 破壞復原鏈,無法時間點還原。
- ❌ 記錄檔越小越好 → 太小導致頻繁成長,嚴重影響寫入效能。
- ❌ 簡單模式無需備份 → 仍需完整備份支援災難復原,只是無法時間點還原。