適用於:SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
在本文中,您將瞭解立即檔案初始化 (IFI),以及如何讓它加速 SQL Server 資料庫檔案的成長。
根據預設,系統會初始化資料和記錄檔,以覆寫先前已刪除檔案磁碟上剩餘的任何現有資料。 資料和記錄檔最先初始化的方式是,在您執行下列作業時清空檔案 (填入零):
- 建立資料庫。
- 將資料或記錄檔新增至現有資料庫。
- 增加現有檔案的大小 (包括自動增長作業)。
- 還原資料庫或檔案群組。
在 SQL Server 中,檔案立即初始化可讓您更快速地執行先前提及的檔案作業,因為它會回收已使用的磁碟空間,而無需在空間填入零。 相反地,當新數據寫入檔案時,會覆寫舊的磁碟內容。
在 Azure SQL 資料庫和 Azure SQL 受控執行個體中,檔案立即初始化僅適用於交易記錄檔。
檔案立即初始化和交易記錄
適用於:SQL Server 2022 (16.x) 和更新版本、Azure SQL 資料庫和 Azure SQL 受控執行個體。
過去,交易記錄檔無法立即初始化。 不過,從 SQL Server 2022 (16.x) (所有版本) 開始,在 Azure SQL 資料庫和 Azure SQL 受控執行個體中,檔案立即初始化可能最多有助於 64 MB 的交易記錄自動成長事件。 新資料庫的預設自動成長大小增量為 64 MB。 大於 64 MB 的交易記錄檔自動成長事件無法受益於檔案立即初始化。
與啟用透明資料加密 (TDE) 時所禁止的資料檔案立即初始化不同,在已啟用 TDE 的資料庫上,允許事務記錄檔的容量增加時進行立即初始化。這是因為事務記錄檔的增長方式以及它是以序列方式寫入的性質。
立即檔案初始化可用於 Azure SQL Database 和 Azure SQL 受控實例的一般用途和業務關鍵層,只為了有利於事務歷史記錄檔的成長。
Azure SQL 資料庫 和 Azure SQL 受控執行個體中無法設定檔案立即初始化。
啟用檔案立即初始化
只有當資料庫引擎服務的服務帳戶或服務 SID 被授予 SE_MANAGE_VOLUME_NAME 權限時,才可以啟用資料檔案的立即檔案初始化。 Windows Administrators 群組的成員具有此許可權,並可將其新增至 [執行磁碟區維護工作 ] 安全策略,將其授與其他使用者。 事務 SE_MANAGE_VOLUME_NAME 成長事件的即時檔案初始化在交易紀錄檔中最多可達 64 MB,不需要許可權,這是在 SQL Server 2022(16.x)版本中引入的。
我們建議您將 SE_MANAGE_VOLUME_NAME 特權授予 Database Engine 服務的 服務 SID。 這可確保即使您變更 Database Engine 服務的服務帳戶,授與仍會維持不變。 如需詳細資訊,請參閱 使用服務 SID 將許可權授與 SQL Server 中的服務。
重要
某些功能使用方式,例如透明資料加密 (TDE),可阻止檔案立即初始化 (IFI)。 在 SQL Server 2022 (16.x) 和更新版本中,以及在 Azure SQL Database 和 Azure SQL 受控實例上,事務歷史記錄上允許 IFI。 如需詳細資訊,請參閱檔案立即初始化和交易記錄。
在 SQL Server 2016 (13.x) 和更新版本中,在安裝期間,此許可權可以在安裝期間授與 Database Engine 服務安全性識別碼 (SID)。
如果您使用命令提示字元安裝,請新增 /SQLSVCINSTANTFILEINIT 引數,或在安裝精靈中核取將執行磁碟區維護工作權限授與 SQL Server 資料庫引擎服務方塊。
若要授與帳戶或服務 SID 安全 Perform volume maintenance tasks 策略:
在將建立資料檔案的電腦上,開啟本機安全性原則應用程式(
secpol.msc)。在左窗格中,展開本機原則,然後選取使用者權限指派。
在右窗格中,按兩下執行磁碟區維護工作。
選取 [新增使用者或群組 ],然後新增Database Engine服務帳戶或其服務 SID。
選取套用,然後關閉所有本機安全性原則對話框。
重新啟動資料庫引擎服務。
在啟動時檢查 Database Engine 錯誤記錄檔。
適用於:SQL Server (自 SQL Server 2012 (11.x) SP4 開始,SQL Server 2014 (12.x) SP2 以及 SQL Server 2016 (13.x) 和更新版本)。
如果 Database Engine 服務帳戶或其服務 SID 被
SE_MANAGE_VOLUME_NAME授與許可權,則會記錄類似下列範例的資訊訊息:Database Instant File Initialization: enabled. For security and performance considerations see the topic 'Database Instant File Initialization' in SQL Server Books Online. This is an informational message only. No user action is required.如果 Database Engine 服務帳戶或其服務 SID 未 獲
SE_MANAGE_VOLUME_NAME授與許可權,則會記錄類似下列範例的資訊訊息:Database Instant File Initialization: disabled. For security and performance considerations see the topic 'Database Instant File Initialization' in SQL Server Books Online. This is an informational message only. No user action is required.
安全性考量
建議您啟用檔案立即初始化,因為優勢可能超過安全性風險。
當您使用檔案立即初始化時,只會覆寫已刪除的磁碟內容,因為新資料會寫入檔案。 出於此原因,在資料檔案的特定區域上寫入某些其他資料之前,未經授權的主體可能會存取已刪除的內容。
當資料庫檔案連結至 SQL Server 執行個體時,這項資訊洩漏風險會依檔案上的判別存取控制清單 (DACL) 降低。 DACL 只允許檔案存取 SQL Server 服務帳戶、其服務 SID 和本機系統管理員。 不過,當檔案被中斷連結時,可能會受到不具備 SE_MANAGE_VOLUME_NAME 許可權的用戶或服務的存取。
下列情況有類似考量:
資料庫已備份。 如果備份檔未受到適當的 DACL 保護,已刪除的內容可供未經授權的使用者或服務使用。
使用 IFI 來增長檔案。 SQL Server 系統管理員可能會存取原始頁面內容,並查看之前刪除的內容。
資料庫檔案託管在存放區域網路。 存放區域網路可能會一律將新頁面呈現為預先初始化,而且讓作業系統重新初始化頁面可能是不必要的額外負荷。
如果關注已刪除內容外洩可能性,您應採取下列其中一個或兩個動作:
請務必確定任何中斷連結的資料檔案和備份檔案都有嚴格的 DACL。
停用 SQL Server 執行個體的檔案立即初始化。 若要這樣做,請撤銷 Database Engine 服務帳戶及其服務 SID 的
SE_MANAGE_VOLUME_NAME。注意
停用 IFI 會增加數據檔的成長時間,而且只會影響撤銷許可權之後建立或增加大小的檔案。
SE_MANAGE_VOLUME_NAME許可權
您可以在 SE_MANAGE_VOLUME_NAMEWindows 系統管理工具本機安全性政策 應用程式中指派特權。 在 [本機原則] 下,選取 [使用者權限指派],然後修改 [執行磁碟區維護工作] 屬性。
效能考量
資料庫檔案初始化程式會將零寫入至初始化下檔案的新區域。 此程序的持續時間取決於初始化的檔案部分大小,以及儲存體系統的回應時間和容量。 如果初始化需要較長時間,您可能會在 SQL Server 錯誤記錄檔和應用程式記錄檔中看到下列記錄的訊息。
Msg 5144
Autogrow of file '%.*ls' in database '%.*ls' was cancelled by user or timed out after %d milliseconds. Use ALTER DATABASE to set a smaller FILEGROWTH value for this file or to explicitly set a new file size.
Msg 5145
Autogrow of file '%.*ls' in database '%.*ls' took %d milliseconds. Consider using ALTER DATABASE to set a smaller FILEGROWTH for this file.
資料庫及/或交易記錄檔的長時間自動增長可能會導致查詢效能問題。 在檔案增長作業期間需要自動增長檔案的作業,例如鎖定或閂鎖等資源。 您可能會在配置頁面的閂鎖上看到長時間等候。 需要長時間自動增長的作業會顯示 PREEMPTIVE_OS_WRITEFILEGATHER 的等候類型。