インスタントファイルの初期化

SQL Serverが新しいディスク領域を予約すると、ゼロで初期化されます。 この動作は無効にできるため、一部の操作の実行時間を短縮し、ディスクサブシステムの負荷を軽減できます。



初期化せずにディスク領域を予約する機能は、 インスタントファイル初期化と呼ばれます



この機能はあまり知られていませんが、その使用はSQL Server 2005以降に可能になりました。



インスタントファイル初期化の利点は何ですか?



1.新しいデータベースの作成を高速化する

2.遅延を減らし、データファイルの成長に必要な時間を短縮します

3. tempdbの初期化が高速になるため、 SQL Serverの起動時間を短縮します

4. SQL Serverを復元する前にファイル用のスペースを確保してから、バックアップからファイルに情報を転送するため、バックアップから復元する時間を短縮します。



インスタントファイルの初期化は、データファイル(MDFおよびNDF)に対してのみ機能することに注意することが重要です。 ログファイル(LDF)は常にゼロに初期化されます。



インスタントファイル初期化の使用方法



すべてをオンにするのは非常に簡単です。 SQL Server構成マネージャーを開き、 SQL Serverのインスタンス起動された名前から学習します。







次に、 ローカルセキュリティポリシーで、 ユーザー権利の割り当て - ボリュームメンテナンスタスクを実行します。







写真に示すように、設定に必要な個性を追加します。







インスタントファイルの初期化が機能するために必要な権限。SQLServerのインスタンスは、起動時に一度だけチェックします。 そのため、 SQL Server再起動して設定を適用する必要があります。



今、実験を行います...



まず、確認しましょう... インスタントファイルの初期化が有効になっていますか?



オフになっている場合、リクエストを実行するとき:



USE [master] GO IF DB_ID('IFI_DB') IS NOT NULL DROP DATABASE IFI_DB GO DBCC TRACEON(3004, 3605, -1) WITH NO_INFOMSGS CREATE DATABASE IFI_DB DBCC TRACEOFF(3004, 3605, -1) WITH NO_INFOMSGS GO IF DB_ID('IFI_DB') IS NOT NULL DROP DATABASE IFI_DB GO EXEC sp_readerrorlog 0, 1
      
      





ログでは、ゼロを埋めるデータファイルを確認できます。



 Zeroing D:\DATABASES\SQL_2012\DATA\IFI_DB.mdf from page 0 to 520 (0x0 to 0x410000) Zeroing completed on D:\DATABASES\SQL_2012\DATA\IFI_DB.mdf Zeroing D:\DATABASES\SQL_2012\LOG\IFI_DB_log.ldf from page 0 to 130 (0x0 to 0x104000) Zeroing completed on D:\DATABASES\SQL_2012\LOG\IFI_DB_log.ldf Starting up database 'IFI_DB'. FixupLogTail(progress) zeroing D:\DATABASES\SQL_2012\LOG\IFI_DB_log.ldf from 0x5000 to 0x6000. Zeroing D:\DATABASES\SQL_2012\LOG\IFI_DB_log.ldf from page 3 to 33 (0x6000 to 0x42000) Zeroing completed on D:\DATABASES\SQL_2012\LOG\IFI_DB_log.ldf
      
      





ただし、 インスタントファイルの初期化が有効になっている場合、ログファイルのみがゼロで埋められます。



 Zeroing D:\DATABASES\SQL_2012\LOG\IFI_DB_log.ldf from page 0 to 130 (0x0 to 0x104000) Zeroing completed on D:\DATABASES\SQL_2012\LOG\IFI_DB_log.ldf Starting up database 'IFI_DB'. FixupLogTail(progress) zeroing D:\DATABASES\SQL_2012\LOG\IFI_DB_log.ldf from 0x5000 to 0x6000. Zeroing D:\DATABASES\SQL_2012\LOG\IFI_DB_log.ldf from page 3 to 33 (0x6000 to 0x42000) Zeroing completed on D:\DATABASES\SQL_2012\LOG\IFI_DB_log.ldf
      
      





ログを見るのが面倒な場合は、次のスクリプトを使用できます。



 USE [master] GO SET NOCOUNT ON; IF DB_ID('IFI_DB') IS NOT NULL DROP DATABASE IFI_DB GO IF OBJECT_ID('tempdb.dbo.#IFI') IS NOT NULL DROP TABLE #IFI GO CREATE TABLE #IFI (dt DATETIME, info VARCHAR(50), txt VARCHAR(MAX)) GO DBCC TRACEON(3004, 3605, -1) WITH NO_INFOMSGS CREATE DATABASE IFI_DB DBCC TRACEOFF(3004, 3605, -1) WITH NO_INFOMSGS GO IF DB_ID('IFI_DB') IS NOT NULL DROP DATABASE IFI_DB GO INSERT INTO #IFI EXEC sp_readerrorlog 0, 1, 'Zeroing' IF EXISTS( SELECT 1 FROM #IFI WHERE txt LIKE 'Zeroing completed%' AND txt LIKE '%IFI_DB.mdf%' AND dt > DATEADD(HOUR, -1, dt) ) PRINT 'Instant File Initialization = OFF' ELSE PRINT 'Instant File Initialization = ON'
      
      





Instant File Initializationを一時的に無効にする必要がある場合は、トレースフラグ1806を有効にできます。しかし、実際に示すように、この機能を使用することで時間とディスクの負荷を大幅に節約できます。



いくつかのテストケースと、 インスタントファイル初期化の有無にかかわらずそれらを実行する時間を次に示します。



 USE [master] GO IF DB_ID('IFI_DB') IS NOT NULL DROP DATABASE [IFI_DB] GO CREATE DATABASE [IFI_DB] CONTAINMENT = NONE ON PRIMARY (NAME = N'IFI_DB', FILENAME = N'D:\DATABASES\SQL_2012\DATA\IFI_DB.mdf', SIZE = 102400MB LOG ON (NAME = N'IFI_DB_log', FILENAME = N'D:\DATABASES\SQL_2012\LOG\IFI_DB_log.ldf', SIZE = 2048KB) GO -- OFF: 00:16:04 -- ON: 00:00:12 ALTER DATABASE [IFI_DB] MODIFY FILE (NAME = N'IFI_DB', SIZE = 204800MB) GO -- OFF: 00:14:32 -- ON: 00:00:11 BACKUP DATABASE [IFI_DB] TO DISK = N'D:\DATABASES\SQL_2012\BACKUP\IFI_DB.bak' WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, COMPRESSION GO IF DB_ID('IFI_DB') IS NOT NULL DROP DATABASE [IFI_DB] GO -- OFF: 00:00:59 -- ON: 00:00:58 USE [master] GO RESTORE DATABASE [IFI_DB] FROM DISK = N'D:\DATABASES\SQL_2012\BACKUP\IFI_DB.bak' WITH FILE = 1, NOUNLOAD -- OFF: 00:28:03 -- ON: 00:00:16
      
      





一般に、 インスタントファイルの初期化を使用することは、障害から回復する際のダウンタイムを削減する素晴らしい方法です。 ファイルの作成は、回復操作自体が始まる前にゼロでファイルを開始するのに長くかかりません。 それで、それをサービスに持ち込んでください... Instant File Initializationのようなものが世界にあることを。



ところで、 SQL Server 2016 CTP3.0の場合、インストール段階でインスタントファイルの初期化を有効にできます。







この記事を英語圏の聴衆と共有したい場合:

インスタントファイルの初期化-SQL ServerのKiller機能



All Articles