Vliv Instant File Initialization na výkon SQL Serveru

SQL Server pokud je správně nastaven dokáže použít „Instant File Initialization (dále jen IFI) pro optimalizaci práce s diskovým systémem. Každá databáze SQL Serveru je tvořena minimálně dvěma soubory – souborem datovým (přípona mdf, master data file) a souborem pro transakční log (ldf, log data file). Při vytváření obou souborů je za výchozího nastavení nutné provést „nulování“ souboru, tj. nastavení jednotlivých bitů na hodnotu 0 pro celou velikost souboru. K těmto operacím dochází pří použití příkazů CREATE DATABASE, ALTER DATABASE (týká-li se IO), RESTORE DATABASE a v případě autogrow operací (každý soubor může být nastaven na autogrow v procentuelní velikosti, nebo v pevné velikosti přírůstku). Zejména v případě autogrow a restore je nutnost čekat na nulování souboru zdlouhavá a zbytečná (vezměme v úvahu případ obnovy databáze o velikosti 200GB, poté čekáme na zapsání nulových hodnot, než proběhne samotná obnova databáze i několik desítek minut). Celé nulování provádí samotný SQL Server, a ne NTFS filesystém.

Pomocí IFI je možné zkrátit čas nutný pro diskové operace s datovými soubory. Pro soubory transakčního logu se IFI nevyužívá, protože při vytvoření logu je nutné provést jeho inicializaci na nulové hodnoty, aby bylo možné rozpoznat počátek logu a využít metadata pro rollback v případě výpadku.

ifi01

Vytvoření nové databáze o velikosti 20GB bez IFI: 20s
Vytvoření nové databáze o velikosti 20GB s IFI: 1s

Samotné povolení IFI je závislé na nastavení Windows Server, nikoli samotném SQL. Je nutné pro účet SQL Server služby přidat právo „Perform Volume Maintenance Tasks“ (SE_MANAGE_VOLUME_NAME privilégium) v konzoli gpedit.msc. Následně je nutné restartovat službu SQL Serveru. V případě odebrání práva je nutný restart windows serveru, již nestačí restart SQL služby. U SQL Server Failover clusteru je nutné nastavení provést na všech nodech clusteru. IFI je dostupné u všech edic SQL Serveru, nejedná se tedy o Enterprise feature, jako u mnoha jiných, které mají vliv na výkon serveru.

Chceme-li zjistit, zda-li je IFI využitá stačí vyzkoušet v SQL Serveru několik traceflagů a podívat se do logu pomocí uložené procedury.

ifi02

Nastavení IFI není zapnuté ve výchozí konfiguraci z bezpečnostních důvodů. Jedná se o drobný security risk, kdy soubory inicializované pomocí IFI obsazují místo, které mohlo být dříve využito na disku jinými daty bez jejich přepsání.

V úvodu zaznělo, že IFI je kontrolována na úrovni operačního systému, je však možné pomocí trace flagu 1806 v rámci SQL Serveru IFI zakázat. Dále nelze IFI využít, pokud je u databází zapnuta Transparent Data Encryption. TDE slouží k šifrování dat (data, logy, zálohy, temp), které je pro aplikaci naprosto transparentní, nenarušuje tedy možnosti pro vyhledávání, cizí klíče atd. navíc chrání i samotnou zálohu pomocí server-level certifikátu.