理解 SQL Server 實體儲存架構是效能調校、災難復原、容量規劃的前提。資料庫由邏輯結構(檔案群組、結構描述)映射至實體檔案(.mdf/.ndf/.ldf),掌握兩者對應關係才能做出正確架構決策。
資料庫檔案三層架構
| 檔案類型 | 副檔名 | 角色 | 數量限制 |
| 主要資料檔 | .mdf | 儲存啟動資訊、系統目錄、未指定檔案群組的使用者資料 | 每資料庫恰好 1 個 |
| 次要資料檔 | .ndf | 分散儲存使用者資料、支援跨磁碟擴充 | 0~N 個 |
| 交易記錄檔 | .ldf | 記錄所有修改操作(INSERT/UPDATE/DELETE),支援復原與複寫 | 1~N 個 |
多檔案架構的效能優勢
- 突破單一檔案大小限制:作業系統檔案大小上限不再是瓶頸。
- 平行 I/O 處理:將檔案分置於不同實體磁碟/RAID 群組,實現多執行緒並行讀寫,特別適合多核心伺服器。
- 資料分層儲存:熱門資料置於 SSD、冷門資料置於 HDD,透過檔案群組導向儲存。
- 備份彈性:支援檔案/檔案群組層級備份,縮小備份窗口。
交易記錄:Write-Ahead Logging (WAL) 機制
- 修改操作先寫入記憶體緩衝區的記錄檔(Log Buffer)。
- 交易認可時,強制將記錄寫入實體 .ldf(確保持久性)。
- 資料頁修改留在緩衝區,由 Checkpoint 背景執行緒定期批次寫入 .mdf/.ndf。
- 系統啟動時,根據記錄檔執行 Redo(重做) 與 Undo(復原),保證資料庫一致性。
關鍵啟示: 記錄檔是資料庫的「黑盒子」,完整性直接關乎災難復原成敗。務必:
- 記錄檔置於獨立磁碟(RAID 1/10),避免與資料檔爭搶 I/O。
- 設定合理初始大小與成長增量(建議固定 MB 而非百分比),減少虛擬記錄檔 (VLF) 碎片。
- 完整復原模式下定期備份記錄檔,防止無限增長填滿磁碟。
檔案群組:邏輯管理的抽象層
- PRIMARY:系統物件預設群組,不可移除、不可設唯讀。
- 使用者定義群組:可設為預設群組、可設唯讀、可獨立備份還原。
- 資料表/索引建立時指定
ON [FileGroup] 決定實體存放位置。
設計資料庫時,先規劃檔案群組拓撲(如:Data_FG、Index_FG、Archive_FG),再對應實體檔案與磁碟配置,才能發揮 SQL Server 分層儲存的最大效益。