Database
 sql >> Datenbank >  >> RDS >> Database

Sofortige Dateiinitialisierung:Auswirkungen während der Einrichtung

Kürzlich hat Erin Stellato (@erinstellato) über die Auswirkungen auf die Leistung gebloggt, die Instant File Initialization (IFI) beim Erstellen oder Wiederherstellen von Datenbanken haben kann. Sie erklärt, dass Ihnen das Setup von SQL Server 2016 jetzt die Möglichkeit bietet, dem SQL Server-Dienst während der Installation die entsprechenden Rechte zu gewähren (wir haben darüber auch im Abschnitt CTP 3.0 von Latest Builds of SQL Server 2016 gesprochen):

Jetzt können Sie die sofortige Dateiinitialisierung während der SQL Server-Einrichtung aktivieren

Der Schlüssel ist eine neue Option (die Sie auch in einer Konfigurationsdatei angeben können):

SQLSVCINSTANTFILEINIT="Wahr|Falsch"

Es ist schön, dass Sie den Zeitaufwand für das Erstellen oder Wiederherstellen von Datenbanken später erheblich reduzieren können, ohne daran denken zu müssen, in gpedit zu gehen, die Rechte richtig zuzuweisen und den Dienst neu zu starten. Aber ein viel größerer Vorteil für mich ist die Möglichkeit, größere tempdb-Dateien während des Setups zu konfigurieren, wodurch IFI frühzeitig genutzt wird.

Jetzt gibt es einige Einschränkungen während des Setups; Beispielsweise ist die Anzahl der tempdb-Dateien auf 8 (oder die Anzahl der Kerne, je nachdem, welcher Wert kleiner ist) begrenzt, und die Größe jeder Datei darf maximal 1.024 MB betragen. Diese Limits werden in der Benutzeroberfläche erzwungen, und ich dachte, dass ich sie vielleicht umgehen könnte, indem ich höhere Größen in einer Konfigurationsdatei für eine unbeaufsichtigte Installation festlege, aber das hat auch nicht funktioniert. (Die Protokolle sagten:"Der Wert 8192 für die TempDB-Dateigröße überschreitet 1024 MB und kann Auswirkungen auf die Installationszeit haben. Sie können ihn auf eine kleinere Größe setzen und nach der Installation ändern.") Ich persönlich denke, dass dies heutzutage der Fall ist und Alter, mit der Geschwindigkeit und Größe des Speichers, den wir erreichen können, ist eine Obergrenze von 1 GB für die Dateigröße künstlich niedrig. Also habe ich einen Connect-Vorschlag eingereicht:

  • Connect #2457759 :tempdb-Datendateien sollten nicht auf 1024 MB beschränkt sein

Und dann wurde darauf hingewiesen, dass Brent Ozar (@BrentO) einen ähnlichen Artikel früher im CTP-Zyklus eingereicht hatte, als das Limit tatsächlich auf 256 MB statt 1 GB durchgesetzt wurde:

  • Connect #1841076 :Anfangsgröße der TempDB-Einrichtung zu gering

Ich habe keine Monstermaschinen, die 64 x 1 GB große Dateien unterstützen könnten, und das wäre auch kein realistischer Test, also beschloss ich, die Auswirkungen von IFI auf 8 tempdb-Datendateien mit jeweils 1 GB zu testen. Ich bin ein bisschen von der alten Schule, also habe ich vier verschiedene INI-Dateien erstellt und die Zeilen hervorgehoben, die ich für jeden Test ändern würde (ich wollte eine Minimalinstallation mit den 4 x 8 MB-Datendateien unter Verwendung von IFI und nicht, und vergleichen Sie es dann mit 8 x 1.024 MB großen Dateien). Da ich diese Schleifen mehrmals ausführen würde, war es wichtig, unterschiedliche Instanznamen zu verwenden, je nachdem, ob IFI aktiviert war oder nicht, denn sobald Sie einem Dienstkonto das Recht erteilt haben, wird es nicht einfach durch Entfernen der Instanz weggenommen (und ich hätte diese Konten auch unabhängig einrichten können, aber ich wollte diese Tests einfach reproduzierbar machen).

;SQL Server 2016 RC0 Konfigurationsdatei
[OPTIONEN]
ACTION="Installieren"
ENU="True"
QUIET="True"
QUIETSIMPLE="False"
UpdateEnabled="False"
ERRORREPORTING="False"
USEMICROSOFTUPDATE="False"
FEATURES=SQLENGINE
HELP="False"
INDICATEPROGRESS=" Falsch"
INSTALLSHAREDDIR="C:\Programme\Microsoft SQL Server"
INSTALLSHAREDWOWDIR="C:\Programme (x86)\Microsoft SQL Server"
INSTANCENAME="ABTESTIFI_ON"
INSTANCEID="ABTESTIFI_ON"
SQLTELSVCSTARTUPTYPE="Deaktiviert"
INSTANCEDIR="C:\Programme\Microsoft SQL Server"
AGTSVCACCOUNT="NT Authority\System"
AGTSVCSTARTUPTYPE ="Manual"
SQLSVCSTARTUPTYPE="Manual"
SQLCOLLATION="SQL_Latin1_General_CP1_CI_AS"
SQLSVCACCOUNT="NT Service\MSSQL$ABTESTIFI_ON"
;True für IFI =ON, False für OFF :
SQLSVCINSTANTFILEINIT="False"
SQLSYSADMINACCOUNTS="NT Authority\System"
SQLTEMPDBFILECOUNT="8"
;1024 für insgesamt 8 GB, 8 für insgesamt 64 MB:
/>SQLTEMPD BFILESIZE="1024"
SQLTEMPDBFILEGROWTH="64"
SQLTEMPDBLOGFILESIZE="8"
SQLTEMPDBLOGFILEGROWTH="64"
BROWSERSVCSTARTUPTYPE="Manuell"

Und hier ist die Batch-Datei, die ich verwendet habe (im selben Ordner wie die Konfigurationsdateien), die die Instanz mit jeder Kombination dreimal installiert und dann deinstalliert und die Setup-Zeiten in einer Textdatei protokolliert – Deinstallation und Bereinigung ignoriert. P> echo Anfangstest…
@echo off 2>nul
setlocal enabledelayedexpansion
set outputfile=time.txt
echo.> %outputfile%
rem Entfernen Sie Acht und/oder Sechzehn, wenn Sie nur 4 Kerne haben!
FOR %%e IN (Baseline Four Eight Sixteen) DO (
FOR %%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=DEINSTALLIEREN /INSTANCENAME=ABTEST%%x /FEATURES=SQL
rem del /Q /S "C:\Programme\Microsoft SQL Server\MSSQL13.ABTEST %%x\*.*"
rem rd /Q /S "C:\Programme\Microsoft SQL Server\MSSQL13.ABTEST%%x\"
)
)
)
@echo on
echo …Test abgeschlossen.

Ein paar Anmerkungen:

  • Möglicherweise müssen Sie die beiden Zeilen von D:\setup.exe ändern in den Pfad zum Setup-Verzeichnis.
  • Möglicherweise müssen Sie Ihr System neu starten, bevor Sie dies ausführen.
  • Sie sollten die Batch-Datei von einer Eingabeaufforderung mit erhöhten Rechten ausführen, damit UAC Sie nicht bei jeder Iteration unterbricht.

Ich habe Tests auf drei verschiedenen Systemen durchgeführt:

  • Eine Windows 10-VM mit 4 Kernen und SSD-Speicher
    Baseline-Test von 4 x 8 MB und dann 4 x 1.024 MB
  • Eine Windows 10-VM mit 8 Kernen und PCIe-Speicher
    Baseline-Test von 4 x 8 MB, 4 x 1.024 MB, 8 x 1.024 MB
  • Eine Windows 2012 R2-VM mit 16 Kernen und einem Dual-Channel-RAID-10-Array aus 8 10.000-SAS-Laufwerken
    Baseline-Test von 4 x 8 MB, 4 x 1.024 MB, 8 x 1.024 MB und 16 x 1.024 MB

Die Ausgabedateien erzeugten eine Reihe von Insert-Anweisungen, die ich hier einfügen könnte:

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];

Hier sind die Timings für jeweils zehn Tests, gemittelt und gerundet (zum Vergrößern anklicken):

Erwartungsgemäß wird IFI bei größeren Dateien auf langsameren Laufwerken wichtig

Die Einrichtung dauert insgesamt etwas mehr als eine Minute (wie schön es ist, die Einrichtung ohne Verwaltungstools auszuführen). Die einzige Abweichung war wirklich, als die Dateigrößen auf den mechanischen Laufwerken größer wurden und die sofortige Dateiinitialisierung deaktiviert war. Ich kann nicht vorgeben, darüber schockiert zu sein.

Schlussfolgerung

Wenn Sie SSD oder PCIe verwenden, kann die sofortige Dateiinitialisierung die Dinge nicht verschlimmern, aber es gibt keinen klaren Vorteil während der Einrichtung, solange die archaischen Dateigrößenbeschränkungen für tempdb-Datendateien intakt bleiben. Mit den aktuellen Regeln scheint es nicht möglich, diese Auswirkung darüber hinaus zu testen (1 GB x die Anzahl der verfügbaren Kerne). Wenn Sie jedoch langsame mechanische Laufwerke verwenden, gibt es einen merklichen Unterschied, selbst wenn nur 8 GB oder 16 GB Daten initialisiert werden – dass das Nullen ziemlich teuer ist, wenn sich die Festplattenköpfe bewegen müssen. Das heißt, ob die Einrichtung 75 Sekunden oder 2 Minuten dauert, ist im Großen und Ganzen ziemlich belanglos (es sei denn, Sie installieren Hunderte von Servern, automatisieren dies aber aus irgendeinem Grund nicht), also denke ich, dass der größere Vorteil hier die Bequemlichkeit ist – nicht Denken Sie daran, dem Dienstkonto einige Zeit nach erfolgreicher Installation die erforderlichen Volume-Rechte zu erteilen. Wenn Sie darüber nachdenken, kann sich diese neue Konfigurationsoption bei automatisierten Installationen einer großen Anzahl von Servern tatsächlich viel besser auszahlen, abgesehen von der Zeitersparnis während der eigentlichen Installation.

  • Laden Sie die Konfigurationsdateien und die Batch-Datei herunter

(Mein nächster Test befasst sich mit der Zeit, die benötigt wird, um die vorhandenen tempdb-Dateien nach der Installation auf eine viel größere Größe als 1.024 MB zu erweitern .)