SQL Serverユーザーを「ボリュームメンテナンスタスクの実行」に追加すると、データベースのサイズ変更の速度が大幅に向上するのはなぜですか?


17

5GBデータベースを作成したい場合

CREATE DATABASE [test]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'test', FILENAME = N'E:\2012\test.mdf' , SIZE = 5529600KB , FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'test_log', FILENAME = N'E:\2012\test_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)

SSD では1分かかります。

しかし、SQL Serverユーザーを Perform volume maintenance tasks

ここに画像の説明を入力してください

わずか1〜2秒しかかかりません。

何故ですか?誰かが私にこの理由を説明できますか?


4
downvotersはdownvotesの理由を説明できますか?これは私にはいい質問のようです。
トーマスストリンガー

回答:


26

これは、Instant File Initializationが原因です。つまり、SQL Serverは、データベースデータファイル(トランザクションログファイルではない)に対してこの特権を利用できます。これは、SQL Serverが初期化時にデータファイルを消去する必要がないことを意味します。

SQLサービスアカウントに「ボリュームメンテナンスタスクの実行」権限が付与されていない場合、データベースの作成時にSQL Serverは「test.mdf」と「test_log.ldf」をゼロにする必要があります。

「ボリュームメンテナンスタスクの実行」権限が設定されている場合、SQL Serverは「test_log.ldf」をゼロにするだけで済みます。オーバーヘッドが大幅に減少するため、CREATE DATABASEテストの期間が最小化されます。

参考資料
となぜインスタントファイル初期化有効にする方法
インスタント初期化を-何を、なぜ、どのように?


機能であるこの継ぎ目は素晴らしいですが、なぜそれのデフォルトはオフですか?
アーメドabdelqader

1

これは、少なくともMS記事によると、.ldfファイル(ログファイル)には影響しません。

どうしてですか? 速度

なぜそれをしないのですか? セキュリティリスクの可能性。誰かがあなたのボックスをハッキングし、ゼロでないメモリ空間を読み取ってそのデータを取得する可能性があります。小さなリスクですが、それでもリスクです。これがデフォルトで有効になっていない理由です。

詳細な説明:インスタントファイルの初期化を有効にする方法と理由


読者への注意:人々がサーバーにハッキングして削除されたファイルから古いデータを読み取ることを心配している場合、IFIをオフにしておくことは役に立つかもしれませんが、それで十分とは思いません。また、削除されたファイルを既に上書きするソフトウェアをお持ちの場合は、IFIをオンにしても大丈夫でしょう。そのソフトウェアはすでに領域をゼロにしたはずです。
RDFozz

インストール中に(SQL 2016以降)SQL Serverサービスアカウントにこの権利を付与するチェックボックスが追加されたため、セキュリティの面でもMSはもう少しリラックスしていると思います。
ガレスライオンズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.