Récemment, Erin Stellato (@erinstellato) a blogué sur l'impact sur les performances que l'initialisation instantanée des fichiers (IFI) peut avoir lors de la création ou de la restauration de bases de données. Elle explique que l'installation de SQL Server 2016 vous offre désormais la possibilité d'accorder les droits appropriés au service SQL Server lors de l'installation (nous en avons également parlé dans la section CTP 3.0 des dernières versions de SQL Server 2016) :
Vous pouvez désormais activer l'initialisation instantanée des fichiers lors de la configuration de SQL Server
La clé est une nouvelle option (que vous pouvez également spécifier dans un fichier de configuration) :
SQLSVCINSTANTFILEINIT="Vrai|Faux"C'est bien que vous puissiez vraiment réduire le temps nécessaire pour créer ou restaurer des bases de données ultérieurement, sans avoir à vous rappeler d'aller dans gpedit, d'attribuer les droits correctement et de redémarrer le service. Mais un avantage beaucoup plus important pour moi est la possibilité de configurer des fichiers tempdb plus volumineux lors de l'installation, en tirant parti rapidement de l'IFI.
Maintenant, il y a des limites lors de la configuration ; par exemple, le nombre de fichiers tempdb est limité à 8 (ou le nombre de cœurs, selon le moins élevé), et la taille de chaque fichier ne peut atteindre qu'un maximum de 1 024 Mo. Ces limites sont appliquées dans l'interface utilisateur, et j'ai pensé que je pourrais peut-être les contourner en spécifiant des tailles plus élevées dans un fichier de configuration pour une installation sans assistance, mais cela n'a pas fonctionné non plus. (Les journaux indiquaient :"La valeur 8192 pour la taille du fichier TempDB dépasse 1024 Mo et peut avoir un impact sur le temps d'installation. Vous pouvez la définir sur une taille plus petite et la modifier après l'installation.") Personnellement, je pense que de nos jours et âge, avec la vitesse et la taille du stockage que nous pouvons obtenir, un plafond de 1 Go sur la taille des fichiers de données est artificiellement bas. J'ai donc déposé une suggestion Connect :
- Connect #2457759 :les fichiers de données tempdb ne doivent pas être limités à 1 024 Mo
Et puis il a été souligné que Brent Ozar (@BrentO) avait déposé un élément similaire plus tôt dans le cycle CTP, alors que la limite était en fait appliquée à 256 Mo au lieu de 1 Go :
- Connect #1841076 :taille initiale de la configuration TempDB trop faible
Je n'ai pas de machines monstres pouvant supporter 64 fichiers de 1 Go, et ce ne serait pas non plus un test réaliste, j'ai donc décidé de tester l'impact d'IFI sur 8 fichiers de données tempdb de 1 Go chacun. Je suis un peu de la vieille école, j'ai donc construit quatre fichiers .ini différents, et j'ai mis en évidence les lignes que je changerais pour chaque test (je voulais baser une installation minimale avec les fichiers de données 4 x 8 Mo, en utilisant IFI et pas, puis comparez-le à 8 fichiers de 1 024 Mo). Étant donné que j'allais exécuter ces boucles plusieurs fois, il était important d'utiliser des noms d'instance différents selon que IFI était activé ou non, car une fois que vous accordez le droit à un compte de service, il n'est pas supprimé en supprimant simplement l'instance (et j'aurais pu configurer ces comptes indépendamment, mais je voulais rendre ces tests faciles à reproduire).
;Fichier de configuration SQL Server 2016 RC0[OPTIONS]
ACTION="Installer"
ENU="True"
QUIET="True"
QUIETSIMPLE="False"
UpdateEnabled="False"
ERRORREPORTING="False"
USEMICROSOFTUPDATE="False"
FEATURES=SQLENGINE
HELP="False"
INDICATEPROGRESS=" Faux"
INSTALLSHAREDDIR="C:\Program Files\Microsoft SQL Server"
INSTALLSHAREDWOWDIR="C:\Program Files (x86)\Microsoft SQL Server"
INSTANCENAME="ABTESTIFI_ON"
INSTANCEID="ABTESTIFI_ON"
SQLTELSVCSTARTUPTYPE="Désactivé"
INSTANCEDIR="C:\Program Files\Microsoft SQL Server"
AGTSVCACCOUNT="NT Authority\System"
AGTSVCSTARTUPTYPE ="Manuel"
SQLSVCSTARTUPTYPE="Manuel"
SQLCOLLATION="SQL_Latin1_General_CP1_CI_AS"
SQLSVCACCOUNT="NT Service\MSSQL$ABTESTIFI_ON"
; Vrai pour IFI =ON, Faux pour OFF :
SQLSVCINSTANTFILEINIT="False"
SQLSYSADMINACCOUNTS="NT Authority\System"
SQLTEMPDBFILECOUNT="8"
;1024 pour un total de 8 Go, 8 pour un total de 64 Mo :
SQLTEMPD BFILESIZE="1024"
SQLTEMPDBFILEGROWTH="64"
SQLTEMPDBLOGFILESIZE="8"
SQLTEMPDBLOGFILEGROWTH="64"
BROWSERSVCSTARTUPTYPE="Manuel"
Et voici le fichier batch que j'ai utilisé (placé dans le même dossier que les fichiers de configuration), qui a installé puis désinstallé l'instance en utilisant chaque combinaison trois fois, et a enregistré les temps d'installation dans un fichier texte - en ignorant la désinstallation et le nettoyage.
echo Début du test…@echo off 2>nul
setlocal enabledelayedexpansion
set outputfile=time.txt
echo.> %outputfile%
rem Supprimez Huit et/ou Seize si vous n'avez que 4 cœurs !
POUR %%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=UNINSTALL /INSTANCENAME=ABTEST%%x /FEATURES=SQL
rem del /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 terminé.
Quelques remarques :
- Vous devrez peut-être modifier les deux lignes de
D:\setup.exe
au chemin d'accès au répertoire d'installation. - Vous devrez peut-être redémarrer votre système avant de l'exécuter.
- Vous souhaiterez exécuter le fichier de commandes à partir d'une invite de commande élevée afin que l'UAC ne vous interrompe pas à chaque itération.
J'ai effectué des tests sur trois systèmes différents :
- Une machine virtuelle Windows 10 avec 4 cœurs et un stockage SSD
Test de base de 4 x 8 Mo, puis de 4 x 1 024 Mo - Une machine virtuelle Windows 10 avec 8 cœurs et un stockage PCIe
Test de base de 4 x 8 Mo, 4 x 1 024 Mo, 8 x 1 024 Mo - Une machine virtuelle Windows 2012 R2 avec 16 cœurs et une matrice RAID 10 double canal de 8 disques SAS 10 000 unités
Test de base de 4 x 8 Mo, 4 x 1 024 Mo, 8 x 1 024 Mo et 16 x 1 024 Mo
Les fichiers de sortie ont généré un tas d'instructions d'insertion que j'ai pu coller ici :
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];
Voici les chronométrages de dix tests chacun, moyennés et arrondis (cliquez pour agrandir) :
Comme on pouvait s'y attendre, IFI devient important avec des fichiers plus volumineux sur des disques plus lents
L'installation prend un peu plus d'une minute à tous les niveaux (comme c'est agréable d'exécuter l'installation sans outils de gestion). Le seul écart, vraiment, était lorsque la taille des fichiers a commencé à grossir sur les lecteurs mécaniques et avec l'initialisation instantanée des fichiers désactivée. Je ne peux pas faire semblant d'être choqué par ça.
Conclusion
Si vous êtes sur SSD ou PCIe, l'initialisation instantanée des fichiers ne peut pas aggraver les choses, mais il n'y a aucun avantage clair lors de l'installation, tant que les limitations de taille de fichier archaïques pour les fichiers de données tempdb restent intactes. Avec les règles actuelles, il ne semble pas possible de tester cet impact au-delà (1 Go x le nombre de cœurs disponibles). Si vous utilisez des lecteurs mécaniques lents, cependant, il y a une différence notable, même lorsque vous n'initialisez que 8 Go ou 16 Go de données - cette mise à zéro est plutôt coûteuse lorsque les têtes de disque doivent se déplacer. Cela dit, que l'installation prenne 75 secondes ou 2 minutes est assez sans importance dans le grand schéma des choses (à moins que vous n'installiez des centaines de serveurs, mais que vous n'automatisez pas cela pour une raison quelconque), donc je pense que le plus grand avantage ici est la commodité - pas devoir se rappeler d'accorder au compte de service les droits de volume nécessaires quelque temps après la réussite de l'installation. Si vous y réfléchissez, cette nouvelle option de configuration peut en fait être bien plus rentable dans les installations automatisées d'un grand nombre de serveurs, en dehors du temps gagné lors de l'installation proprement dite.
- Téléchargez les fichiers de configuration et le fichier batch
(Mon prochain test examinera le temps nécessaire pour étendre les fichiers tempdb existants à une taille bien supérieure à 1 024 Mo après l'installation .)