傳統 SQL Server 初始化資料檔 (MDF/NDF) 時,會逐頁寫入零值 (Zero-fill) 以確保舊資料不可讀。對於 TB 級資料庫,**零填充可能耗費數小時**,嚴重延長維護窗口、災難復原時間 (RTO)。**瞬間檔案初始化 (Instant File Initialization, IFI)** 透過跳過零填充,直接配置磁碟空間,實現**毫秒級檔案建立/擴充/還原**。
| 條件 | 說明 |
|---|---|
| SQL Server 版本 | 2005 SP1+ / 2008 / 2012 / 2014 / 2016 / 2017 / 2019 (所有版本) |
| 作業系統 | Windows Server 2003 SP1+ / Windows XP SP2+ / Vista / 7 / 2008 / 2012 / 2016 / 2019 |
| 檔案系統 | **NTFS** (FAT32/ReFS 不支援) |
| 適用檔案類型 | **僅資料檔 (MDF/NDF)**,**不含記錄檔 (LDF)** — 記錄檔必須零填充以保證復原正確性 |
| 服務帳號權限 | 需具備 **「執行磁碟區維護工作」 (Perform Volume Maintenance Tasks, SE_MANAGE_VOLUME_NAME)** 本地安全性原則權限 |
SQL Server 無直接旗標顯示 IFI 狀態,需透過 **追蹤旗標 3004/3605** 觀察錯誤記錄:
-- 1. 啟用追蹤旗標 (需 sysadmin)
DBCC TRACEON (3004, 3605, -1); -- 3004: 列印零填充訊息, 3605: 導向錯誤記錄
GO
-- 2. 執行觸發初始化操作 (建立資料庫/擴充檔案/還原)
CREATE DATABASE IFI_Test ON PRIMARY (NAME = 'IFI_Test', FILENAME = 'D:\Data\IFI_Test.mdf', SIZE = 500MB);
GO
-- 3. 檢視 SQL Server 錯誤記錄 (SSMS → 管理 → SQL Server 記錄檔)
-- 若啟用 IFI:錯誤記錄**不會**出現 "Zeroing" 相關訊息。
-- 若未啟用 IFI:會出現 "Zeroing page ...", "Zeroing completed in X ms" 等訊息。
-- 4. 關閉追蹤旗標
DBCC TRACEOFF (3004, 3605, -1);
GO
DROP DATABASE IFI_Test;
| 場景 | 未啟用 IFI | 啟用 IFI | 提升倍數 |
|---|---|---|---|
| 建立 500MB 資料檔 | ~15 秒 | ~0.2 秒 | 75x |
| 自動成長 1GB | ~30 秒 (阻塞寫入) | ~0.3 秒 | 100x |
| 還原 200GB 備份 | ~45 分鐘 | ~8 分鐘 | 5.6x (受限於備份讀取/記錄重做) |