SQL Server 將事務日志分為過去部分(非活躍)與當前部分(活躍),配合預寫日志(Write-Ahead Log, WAL)機制,保證系統崩潰後能恢復到最後一個提交點。
關鍵概念
- WAL 原則:數據頁修改必須先寫入日志,再寫入數據文件(延遲寫入)。提交事務時,只需保證日志落盤(Force Log),數據頁可稍後由 Checkpoint 刷盤。
- 日志截斷:簡單恢復模式下 Checkpoint 後自動截斷非活躍部分;完整/大量日志模式需備份日志才能截斷。
- 恢復階段:
- 分析階段:掃描日志確定最後 Checkpoint、活躍事務、脏頁列表
- 重做階段:從最早未完成事務開始,向前重放所有操作(含已提交與未提交)
- 回滾階段:針對未提交事務,向後撤銷其操作
實戰啟示
- 日志文件不可隨意刪除/縮小,否則破壞恢復鏈
- 長事務會阻塞日志截斷,導致日志暴增 → 監控
DBCC OPENTRAN
- 高可用架構(鏡像、AlwaysOn)依賴日志傳輸與重放,理解 WAL 是排查同步延遲的基礎