sql >> Databáze >  >> RDS >> Database

Okamžitá inicializace souboru:Dopad během instalace

Nedávno Erin Stellato (@erinstellato) blogovala o vlivu na výkon, který může mít Instant File Initialization (IFI) při vytváření nebo obnově databází. Vysvětluje, že nastavení SQL Server 2016 vám nyní nabízí možnost udělit příslušná práva službě SQL Server během instalace (o tom jsme také hovořili v sekci CTP 3.0 v nejnovějších sestavách SQL Server 2016):

Nyní můžete povolit okamžitou inicializaci souboru během nastavení serveru SQL

Klíč je nová volba (kterou můžete také zadat v konfiguračním souboru):

SQLSVCINSTANTFILEINIT="Pravda|Nepravda"

Je hezké, že můžete skutečně zkrátit dobu potřebnou k pozdějšímu vytvoření nebo obnovení databází, aniž byste museli pamatovat na přechod do gpeditu, správné přiřazení práv a restartování služby. Mnohem větší výhodou je pro mě možnost konfigurovat větší soubory tempdb během instalace a využít tak včasné výhody IFI.

Nyní existují určitá omezení během nastavování; například počet souborů tempdb je omezen na 8 (nebo počet jader, podle toho, co je menší) a velikost každého souboru může dosáhnout maximálně 1 024 MB. Tyto limity jsou vynuceny v uživatelském rozhraní a myslel jsem, že bych je mohl obejít zadáním vyšších velikostí v konfiguračním souboru pro bezobslužnou instalaci, ale ani to nefungovalo. (V protokolech bylo uvedeno:"Hodnota 8192 pro velikost souboru TempDB přesahuje 1024 MB a může mít vliv na dobu instalace. Můžete ji nastavit na menší velikost a po instalaci ji změnit.") Osobně si myslím, že v dnešní době věk, s rychlostí a velikostí úložiště, které dokážeme získat, je limit 1 GB na velikost datového souboru uměle nízký. Takže jsem podal návrh na připojení:

  • Connect #2457759 :datové soubory tempdb by neměly být omezeny na 1024 MB

A pak bylo poukázáno na to, že Brent Ozar (@BrentO) podal podobnou položku dříve v cyklu CTP, kdy byl limit ve skutečnosti uplatněn jako 256 MB místo 1 GB:

  • Connect #1841076 :Počáteční velikost nastavení TempDB je příliš nízká

Nemám žádné monstrum, které by podporovalo soubory 64 x 1 GB, a to by také nebyl realistický test, takže jsem se rozhodl otestovat dopad IFI na 8 datových souborů tempdb, každý o velikosti 1 GB. Jsem ze staré školy, takže jsem vytvořil čtyři různé soubory .ini a zvýraznil jsem řádky, které bych pro každý test změnil (chtěl jsem založit minimální instalaci s datovými soubory 4 x 8 MB, pomocí IFI a ne a poté to porovnejte se soubory 8 x 1 024 MB). Protože bych tyto smyčky spouštěl vícekrát, bylo důležité používat různé názvy instancí v závislosti na tom, zda bylo IFI povoleno nebo ne, protože jakmile udělíte právo na servisní účet, nebude odebráno pouhým odstraněním instance (a mohl jsem tyto účty nastavit nezávisle, ale chtěl jsem, aby se tyto testy daly snadno reprodukovat).

;Konfigurační soubor SQL Server 2016 RC0
[MOŽNOSTI]
ACTION="Instalovat"
ENU="True"
QUIET="True"
QUIETSIMPLE="False"
UpdateEnabled="False"
ERRORREPORTING="False"
USEMICROSOFTUPDATE="False"
FEATURES=SQLENGINE
HELP="False"
INDICATEPROGRESS=" False"
INSTALLSHAREDDIR="C:\Program Files\Microsoft SQL Server"
INSTALLSHAREDWOWDIR="C:\Program Files (x86)\Microsoft SQL Server"
INSTANCENAME="ABTESTIFI_ON"
INSTANCEID="ABTESTIFI_ON"
SQLTELSVCSTARTUPTYPE="Zakázáno"
INSTANCEDIR="C:\Program Files\Microsoft SQL Server"
AGTSVCACCOUNT="NT Authority\System"
AGTSVCSTARTUPTYPE ="Manuální"
SQLSVCSTARTUPTYPE="Manuál"
SQLCOLLATION="SQL_Latin1_General_CP1_CI_AS"
SQLSVCACCOUNT="NT Service\MSSQL$ABTESTIFI_ON"
;Pravda pro IFI =ZAPNUTO, Nepravda pro VYPNUTO :
SQLSVCINSTANTFILEINIT="False"
SQLSYSADMINACCOUNTS="NT Authority\System"
SQLTEMPDBFILECOUNT="8"
;1024 pro celkem 8 GB, 8 pro celkem 64 MB:
SQLTEMPD BFILESIZE="1024"
SQLTEMPDBFILEGROWTH="64"
SQLTEMPDBLOGFILESIZE="8"
SQLTEMPDBLOGFILEGROWTH="64"
BROWSERSVCSTARTUPTYPE="Manuál"

A zde je dávkový soubor, který jsem použil (umístěný ve stejné složce jako konfigurační soubory), který nainstaloval a poté odinstaloval instanci pomocí každé kombinace třikrát a zaprotokoloval časy nastavení do textového souboru – ignoroval odinstalaci a vyčištění.

echo Začátek testu…
@echo off 2>nul
setlocal enabledelayedexpansion
set outputfile=time.txt
echo.> %outputfile%
rem Odeberte osm a/nebo šestnáct, pokud máte pouze 4 jádra!
PRO %%e IN (Základní čtyři Osm šestnáct) UDĚLEJTE (
PRO %%x IN (IFI_ON IFI_OFF) DO (
FOR /L %%A IN (1,1,3) DO (
echo INSERT #x VALUES('%%e', '%%x', '!TIME! ',>> %outputfile%
D:\setup.exe /Q /IACCEPTSQLSERVERLICENSETERMS /ConfigurationFile=%%e_%%x.ini
echo '!TIME!' ^)>> %outputfile%
D:\setup.exe /Q /ACTION=ODINSTALOVAT /INSTANCENAME=ABTEST%%x /FEATURES=SQL
z /Q /S "C:\Program Files\Microsoft SQL Server\MSSQL13.ABTEST %%x\*.*"
rem rd /Q /S "C:\Program Files\Microsoft SQL Server\MSSQL13.ABTEST%%x\"
)
)
)
@echo on
echo …test dokončen.

Několik poznámek:

  • Možná budete muset změnit dva řádky z D:\setup.exe na cestu k instalačnímu adresáři.
  • Před spuštěním může být nutné restartovat systém.
  • Budete chtít spouštět dávkový soubor z příkazového řádku se zvýšenými oprávněními, aby vás nástroj UAC nepřerušoval při každé iteraci.

Provedl jsem testy na třech různých systémech:

  • Virtuální počítač s Windows 10 se 4 jádry a úložištěm SSD
    Základní test 4 x 8 MB a poté 4 x 1 024 MB
  • Virtuální počítač se systémem Windows 10 s 8 jádry a úložištěm PCIe
    Základní test 4 x 8 MB, 4 x 1 024 MB, 8 x 1 024 MB
  • Virtuální počítač se systémem Windows 2012 R2 se 16 jádry a dvoukanálovým polem RAID 10 s 8 jednotkami SAS 10K
    Základní test 4 x 8 MB, 4 x 1 024 MB, 8 x 1 024 MB a 16 x 1 024 MB

Výstupní soubory vygenerovaly spoustu příkazů vložení, které jsem mohl vložit sem:

CREATE TABLE #x
(
  [server] varchar(32),
  [test]   varchar(32),
  [start]  time(2),
  [end]    time(2)
);
 
-- inserts pasted here
 
SELECT [server],[test],AVG(DATEDIFF(SECOND,[start],[end])*1.0)
FROM #x
GROUP BY [server],[test];

Zde jsou načasování v každém z deseti testů, zprůměrované a zaokrouhlené (klikněte pro zvětšení):

Předvídatelně se IFI stává důležitým s většími soubory na pomalejších discích

Nastavení zabere celkově něco málo přes minutu (jak hezké je spustit instalaci bez nástrojů pro správu). Jedinou odchylkou ve skutečnosti bylo, když se velikosti souborů začaly zvětšovat na mechanických jednotkách a bez okamžité inicializace souborů. Nemohu předstírat, že mě to šokuje.

Závěr

Pokud používáte SSD nebo PCIe, okamžitá inicializace souborů nemůže situaci zhoršit, ale během instalace to není žádný jasný přínos, pokud zůstanou nedotčena archaická omezení velikosti souborů pro datové soubory tempdb. Se současnými pravidly se nezdá možné tento dopad testovat dále (1 GB x počet dostupných jader). Pokud však používáte pomalé mechanické disky, je zde patrný rozdíl, i když pouze inicializujete 8 GB nebo 16 GB dat – toto vynulování je poměrně drahé, když se hlavy disku musí pohybovat. To znamená, že to, zda nastavení trvá 75 sekund nebo 2 minuty, je v celkovém schématu věcí docela nepodstatné (pokud neinstalujete stovky serverů, ale neautomatizujete to z nějakého důvodu), takže si myslím, že větší výhodou je zde pohodlí – ne po určité době po úspěšné instalaci je nutné udělit servisnímu účtu potřebná objemová práva. Pokud se nad tím zamyslíte, tato nová možnost konfigurace se může ve skutečnosti mnohem lépe vyplatit při automatizovaných instalacích velkého počtu serverů, mimo čas ušetřený během skutečné instalace.

  • Stáhněte si konfigurační soubory a dávkový soubor

(Můj další test se podívá na čas potřebný k rozšíření stávajících souborů tempdb na mnohem větší velikost než 1 024 MB po instalaci .)


  1. MySQL zobrazuje indexy v databázi

  2. SQL MAX() pro začátečníky

  3. Jak použít LOAD_FILE k načtení souboru do MySQL blob?

  4. Typy kurzoru serveru SQL Server – pouze vpřed dynamický kurzor | Kurz SQL Server / Kurz TSQL