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

深入理解 SQL Server 交易記錄檔:架構、維護、還原與效能優化全攻略

     編輯:關於SqlServer

交易記錄檔核心角色

記錄資料庫所有變更操作,獨立儲存於 .ldf 檔案。每筆交易從開始到 COMMIT/ROLLBACK 完整記錄,支援:

  • 復原:將資料檔恢復至交易前狀態 (Undo) 或重做已提交交易。
  • 異動複寫:記錄檔為複寫來源。
  • 高可用性:Log Shipping、Database Mirroring、AlwaysOn 依賴記錄檔傳送。

運作機制:寫入緩衝與檢查點

  1. 資料修改先寫入記憶體緩衝區 (Buffer Pool)。
  2. 記錄檔同步寫入 (Write-Ahead Logging, WAL),確保持久性。
  3. 檢查點 定期將髒頁刷新至資料檔,並在記錄檔標記檢查點 LSN。
  4. 服務重啟時,從最新檢查點向前重做、向後回復未提交交易。

維護管理:避免記錄檔失控增長

1. 定期記錄檔備份 (完整/大量記錄復原模式)

備份會截斷非作用中虛擬記錄檔 (VLF),標記為可重複使用,防止檔案無限增長。

2. 簡單復原模式

每次檢查點自動截斷記錄檔,無法進行時間點還原,適合測試/唯讀環境。

3. 壓縮記錄檔 (DBCC SHRINKFILE)

截斷釋放邏輯空間,壓縮才釋放物理磁碟空間:

DBCC SHRINKFILE (N'MyDB_Log', 100) -- 壓縮至 100MB
-- 或資料庫層級
DBCC SHRINKDATABASE (MyDB, 10)

建議離峰執行,避免影響生產效能。自動壓縮 (AUTO_SHRINK) 生產環境不建議開啟。

資料庫還原策略

  1. 還原完整備份 (WITH NORECOVERY)。
  2. 依序還原差異備份 (WITH NORECOVERY)。
  3. 依時間順序還原所有記錄檔備份 (WITH NORECOVERY),最後一筆 WITH RECOVERY 完成上線。
  4. 時間點還原:RESTORE LOG ... WITH STOPAT = 'YYYY-MM-DD HH:MM:SS'。

Log Shipping 災難復原架構

  • 主伺服器定期備份記錄檔 → 複製至備援伺服器 → 自動還原 (STANDBY 模式可唯讀查詢)。
  • 監視伺服器偵測傳送間隔超時,記錄事件日誌發出警示。
  • 適合異地備援、報表卸載、資料庫遷移。

效能優化三大原則

  1. 記錄檔置於獨立磁碟:連續寫入特性,獨立 RAID 1/10 磁碟可最大化吞吐量,避免與資料檔隨機 I/O 爭用。
  2. 合理設定初始大小與成長增量:預先配置足夠空間 (如預估日增長 1GB,初始 10GB,增量 512MB),避免頻繁自動成長造成效能抖動與碎片。
  3. 監控 VLF 數量:過多 VLF (DBCC LOGINFO) 會拖慢啟動復原、備份還原、複寫讀取。適當壓縮後重建記錄檔可減少 VLF。

常見錯誤迷思

  • ❌ 定期 TRUNCATE_ONLY / NO_LOG 替代備份 → 破壞復原鏈,無法時間點還原。
  • ❌ 記錄檔越小越好 → 太小導致頻繁成長,嚴重影響寫入效能。
  • ❌ 簡單模式無需備份 → 仍需完整備份支援災難復原,只是無法時間點還原。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved