資料庫檔案立即初始化

適用於: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 權限:

  1. 在將要建立資料檔案的電腦上,開啟本機安全性原則應用程式 (secpol.msc)。

  2. 在左窗格中,展開本機原則,然後選取使用者權限指派

  3. 在右窗格中,按兩下執行磁碟區維護工作

  4. 選取新增使用者或群組,然後新增執行 SQL Server 服務的帳戶。

  5. 選取套用,然後關閉所有本機安全性原則對話框。

  6. 重新啟動 SQL Server 服務。

  7. 在啟動時檢查 SQL Server 錯誤記錄檔。

    適用於:SQL Server (自 SQL Server 2012 (11.x) SP4 開始,SQL Server 2014 (12.x) SP2 以及 SQL Server 2016 (13.x) 和更新版本)。

    1. 如果授與 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.

    2. 如果授與 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 的等候類型。