資料庫檔案立即初始化
適用於:SQL ServerAzure SQL DatabaseAzure 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) 的資料庫上,針對交易記錄檔增長進行檔案立即初始化。
- 檔案立即初始化僅可用於一般用途,以及 Azure SQL 資料庫和 Azure SQL 受控執行個體的業務關鍵層,有利於交易記錄檔的增長。
- Azure SQL 資料庫 和 Azure SQL 受控執行個體中無法設定檔案立即初始化。
啟用檔案立即初始化
只有在授與 SE_MANAGE_VOLUME_NAME
SQL Server 服務啟動帳戶時,才可使用資料檔案的檔案立即初始化。 Windows 系統管理員群組的成員具有此權限,並可將其新增至執行磁碟區維護工作安全性原則,以將其授與其他使用者。 交易記錄中最多 64 MB 的增長事件的檔案立即初始化無需 SE_MANAGE_VOLUME_NAME
權限,這是隨 SQL Server 2022 (16.x) 版本推出的。
重要
某些功能使用方式,例如透明資料加密 (TDE),可阻止檔案立即初始化。 自 SQL Server 2022 (16.x) 和 Azure SQL 資料庫 和 Azure SQL 受控執行個體開始,交易記錄上允許 IFI。 如需詳細資訊,請參閱檔案立即初始化和交易記錄。
注意
自 SQL Server 2016 (13.x) 開始,此權限可在設定期間即時授與服務帳戶。
如果使用命令提示字元安裝,請新增 /SQLSVCINSTANTFILEINIT
引數,或在安裝精靈中核取將執行磁碟區維護工作權限授與 SQL Server 資料庫引擎服務方塊。
若要授與帳戶 Perform volume maintenance tasks
權限:
在將要建立資料檔案的電腦上,開啟本機安全性原則應用程式 (
secpol.msc
)。在左窗格中,展開本機原則,然後選取使用者權限指派。
在右窗格中,按兩下執行磁碟區維護工作。
選取新增使用者或群組,然後新增執行 SQL Server 服務的帳戶。
選取套用,然後關閉所有本機安全性原則對話框。
重新啟動 SQL Server 服務。
在啟動時檢查 SQL Server 錯誤記錄檔。
適用於:SQL Server (自 SQL Server 2012 (11.x) SP4 開始,SQL Server 2014 (12.x) SP2 以及 SQL Server 2016 (13.x) 和更新版本)。
如果授與
SE_MANAGE_VOLUME_NAME
SQL Server 服務啟動帳戶,則會記錄類似下列範例的資訊訊息: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.
如果未授與
SE_MANAGE_VOLUME_NAME
SQL Server 服務啟動帳戶,則會記錄類似下列範例的資訊訊息: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 中,使用 sys.dm_server_services 動態管理檢視中的
instant_file_initialization_enabled
值,識別執行個體是否已啟用檔案立即初始化。
安全性考量
建議您啟用檔案立即初始化,因為優勢可能超過安全性風險。
當您使用檔案立即初始化時,只會覆寫已刪除的磁碟內容,因為新資料會寫入檔案。 出於此原因,在資料檔案的特定區域上寫入某些其他資料之前,未經授權的主體可能會存取已刪除的內容。
當資料庫檔案連結至 SQL Server 執行個體時,這項資訊洩漏風險會依檔案上的判別存取控制清單 (DACL) 降低。 此 DACL 只允許對 SQL Server 服務帳戶和本機系統管理員進行檔案存取。 不過,中斷連結檔案時,沒有 SE_MANAGE_VOLUME_NAME
的使用者或服務可存取該檔案。
下列情況有類似考量:
資料庫已備份。 如果備份檔未受到適當的 DACL 保護,已刪除的內容可供未經授權的使用者或服務使用。
使用 IFI 來增長檔案。 SQL Server 系統管理員可能會存取原始頁面內容,並查看之前刪除的內容。
資料庫檔案託管在存放區域網路。 存放區域網路可能會一律將新頁面呈現為預先初始化,而且讓作業系統重新初始化頁面可能是不必要的額外負荷。
如果關注已刪除內容外洩可能性,您應採取下列其中一個或兩個動作:
請務必確定任何中斷連結的資料檔案和備份檔案都有嚴格的 DACL。
停用 SQL Server 執行個體的檔案立即初始化。 若要執行此操作,請從 SQL Server 服務啟動帳戶撤銷
SE_MANAGE_VOLUME_NAME
。注意
停用會增加資料檔案的配置時間,而且只會影響在撤銷使用者權限之後建立或增加大小的檔案。
SE_MANAGE_VOLUME_NAME 使用者權限
您可在 Windows 管理工具、本機安全性原則小程式中指派 SE_MANAGE_VOLUME_NAME
使用者權限。 在 [本機原則] 下,選取 [使用者權限指派],然後修改 [執行磁碟區維護工作] 屬性。
效能考量
資料庫檔案初始化程序會在初始化檔案的新區域寫入零。 此程序的持續時間取決於初始化的檔案部分大小,以及儲存體系統的回應時間和容量。 如果初始化需要較長時間,您可能會在 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
的等候類型。
相關內容
意見反映
https://aka.ms/ContentUserFeedback。
即將推出:我們會在 2024 年淘汰 GitHub 問題,並以全新的意見反應系統取代並作為內容意見反應的渠道。 如需更多資訊,請參閱:提交及檢視以下的意見反映: