データファイル(mdf/ndf)の作成・拡張時、SQL Serverは通常セキュリティ上の理由でディスクにゼロを書き込んで初期化します。 これが大きなファイルだと数分〜数十分かかることがあります。 IFIを有効にするとこのゼロ書き込みステップをスキップして、確保した領域を即座に使い始めることができます。 データベース作成、リストア、データファイル拡張、自動拡張などが劇的に速くなります。
SQL Server 2016以降、インストール時にDatabase Engineサービスのサービスセキュリティ識別子(SID)に対してこの権限を付与できるようになっています。
コマンドラインインストールでは /SQLSVCINSTANTFILEINIT 引数を追加するか、
インストールウィザードで「SQL Serverデータベースエンジンサービスにボリュームの保守タスクを実行する特権を付与する」のチェックボックスをオンにします。
IFIが有効か確認するには次のSQLを実行します。
-- IFI が有効か確認
SELECT
CASE WHEN service_account = 'NT Service\MSSQLSERVER' THEN 'サービスアカウント要確認' END,
instant_file_initialization_enabled
FROM sys.dm_server_services
WHERE servicename LIKE 'SQL Server (%';
"サービスアカウント要確認"の値が "Y"であれば有効に、"N"であれば無効の状態です。
| (列名なし) | instant_file_initialization_enabled |
|---|---|
| サービスアカウント要確認 | N |
はじめに次のSQLを実行して、サービスアカウントを確認します。
SELECT
servicename,
service_account,
instant_file_initialization_enabled
FROM sys.dm_server_services
WHERE servicename LIKE 'SQL Server (%';
| servicename | service_account | instant_file_initialization_enabled |
|---|---|---|
| SQL Server (MSSQLSERVER) | (サービスアカウント名) | N |
(サービスアカウント名)部分にSQL Serverのサービスアカウントが表示されます。
SQL Server のサービスアカウントに対して、「ボリュームの保守タスクを実行」権限を付与します。
[ローカル セキュリティ ポリシー]を開きます。
左側のツリービューで、[ローカルポリシー]の[ユーザー権利の割り当て]のノードをクリックして選択します。
右側のエリアで [ボリュームの保守タスクを実行] の項目を探してダブルクリックします。
下図の[ボリュームの保守タスクを実行のプロパティ]のダイアログが表示されます。
[ユーザーまたはグループの追加]ボタンをクリックします。
下図の[ユーザー または グループ の選択]ダイアログが表示されます。
[選択するオブジェクト名を入力してください] のテキストボックスに、先ほど調べた SQL Server のサービスアカウントを入力して追加します。
SQL Server のサービスアカウントが追加できました。[OK]ボタンをクリックしてダイアログボックスを閉じます。
SQL Serverを再起動します。[サービス]を開きます。サービスの一覧から [SQL Server] のサービスを選択します。
右クリックしてポップアップメニューを表示します。メニューの[再起動]の項目をクリックします。
再起動後、先ほど実行したSQLを実行して、Instant File Initialization(IFI)が有効になっているかを確認します。
-- IFI が有効か確認
SELECT
CASE WHEN service_account = 'NT Service\MSSQLSERVER' THEN 'サービスアカウント要確認' END,
instant_file_initialization_enabled
FROM sys.dm_server_services
WHERE servicename LIKE 'SQL Server (%';
| (列名なし) | instant_file_initialization_enabled |
|---|---|
| サービスアカウント要確認 | Y |