sql >> Base de Datos >  >> RDS >> Database

Inicialización instantánea de archivos:impacto durante la configuración

Recientemente, Erin Stellato (@erinstellato) escribió en su blog sobre el impacto en el rendimiento que puede tener la inicialización instantánea de archivos (IFI) al crear o restaurar bases de datos. Ella explica que la configuración de SQL Server 2016 ahora le ofrece la posibilidad de otorgar los derechos apropiados al servicio de SQL Server durante la instalación (también hablamos de esto en la sección CTP 3.0 de Últimas compilaciones de SQL Server 2016):

Ahora puede habilitar la inicialización instantánea de archivos durante la instalación de SQL Server

La clave es una nueva opción (que también puede especificar en un archivo de configuración):

SQLSVCINSTANTFILEINIT="Verdadero|Falso"

Es bueno que realmente pueda reducir la cantidad de tiempo que lleva crear o restaurar bases de datos más tarde, sin tener que recordar ingresar a gpedit, asignar los derechos correctamente y reiniciar el servicio. Pero un beneficio mucho mayor para mí es la capacidad de configurar archivos tempdb más grandes durante la instalación, aprovechando IFI desde el principio.

Ahora, hay algunos límites durante la configuración; por ejemplo, la cantidad de archivos tempdb está limitada a 8 (o la cantidad de núcleos, lo que sea menor), y el tamaño de cada archivo solo puede alcanzar un máximo de 1024 MB. Estos límites se imponen en la interfaz de usuario, y pensé que podría sortearlos especificando tamaños más altos en un archivo de configuración para una instalación desatendida, pero tampoco funcionó. (Los registros decían:"El valor 8192 para el tamaño del archivo TempDB supera los 1024 MB y puede tener un impacto en el tiempo de instalación. Puede establecerlo en un tamaño más pequeño y cambiarlo después de la instalación".) Personalmente, creo que en este día y edad, con la velocidad y el tamaño del almacenamiento que podemos obtener, un límite de 1 GB en el tamaño del archivo de datos es artificialmente bajo. Así que presenté una sugerencia de Connect:

  • Conectar #2457759:los archivos de datos tempdb no deben limitarse a 1024 MB

Y luego se señaló que Brent Ozar (@BrentO) presentó un artículo similar anteriormente en el ciclo de CTP, cuando el límite en realidad era de 256 MB en lugar de 1 GB:

  • Conexión n.º 1841076:el tamaño inicial de configuración de TempDB es demasiado bajo

No tengo ninguna máquina monstruosa que pueda admitir archivos de 64 x 1 GB, y tampoco sería una prueba realista, así que resolví probar el impacto de IFI en 8 archivos de datos tempdb de 1 GB cada uno. Soy un poco de la vieja escuela, así que construí cuatro archivos .ini diferentes y resalté las líneas que cambiaría para cada prueba (quería hacer una instalación básica mínima con los archivos de datos de 4 x 8 MB, usando IFI y no, y luego compárelo con 8 archivos de 1024 MB). Dado que estaría ejecutando estos bucles varias veces, era importante usar diferentes nombres de instancia dependiendo de si IFI estaba habilitado o no, porque una vez que otorga el derecho a una cuenta de servicio, no se quita simplemente eliminando la instancia. (y podría haber configurado esas cuentas de forma independiente, pero quería que estas pruebas fueran fáciles de reproducir).

;Archivo de configuración de SQL Server 2016 RC0
[OPCIONES]
ACCIÓN="Instalar"
ENU="Verdadero"
QUIET="Verdadero"
QUIETSIMPLE="Falso"
UpdateEnabled="False"
ERRORREPORTING="False"
USEMICROSOFTUPDATE="False"
FEATURES=SQLENGINE
HELP="False"
INDICATEPROGRESS=" Falso"
INSTALLSHAREDDIR="C:\Archivos de programa\Microsoft SQL Server"
INSTALLSHAREDWOWDIR="C:\Archivos de programa (x86)\Microsoft SQL Server"
INSTANCENAME="ABTESTIFI_ON"
INSTANCEID="ABTESTIFI_ON"
SQLTELSVCSTARTUPTYPE="Deshabilitado"
INSTANCEDIR="C:\Archivos de programa\Microsoft SQL Server"
AGTSVCACCOUNT="NT Authority\System"
AGTSVCSTARTUPTYPE ="Manual"
SQLSVCSTARTUPTYPE="Manual"
SQLCOLLATION="SQL_Latin1_General_CP1_CI_AS"
SQLSVCACCOUNT="NT Service\MSSQL$ABTESTIFI_ON"
;Verdadero para IFI =ENCENDIDO, falso para APAGADO :
SQLSVCINSTANTFILEINIT="False"
SQLSYSADMINACCOUNTS="NT Authority\System"
SQLTEMPDBFILECOUNT="8"
;1024 para 8 GB en total, 8 para 64 MB en total:
SQLTEMPD BFILESIZE="1024"
SQLTEMPDBFILEGROWTH="64"
SQLTEMPDBLOGFILESIZE="8"
SQLTEMPDBLOGFILEGROWTH="64"
BROWSERSVCSTARTUPTYPE="Manual"

Y aquí está el archivo por lotes que utilicé (ubicado en la misma carpeta que los archivos de configuración), que instaló y luego desinstaló la instancia usando cada combinación tres veces, y registró los tiempos de configuración en un archivo de texto, ignorando la desinstalación y la limpieza.

echo Prueba inicial…
@echo off 2>nul
establecer expansión de retardo habilitada local
establecer archivo de salida=tiempo.txt
echo.> %outputfile%
rem ¡Elimine Eight y/o Sixteen si solo tiene 4 núcleos!
PARA %%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:\Archivos de programa\Microsoft SQL Server\MSSQL13.ABTEST%%x\"
)
)
)
@echo on
echo …prueba completa.

Algunas notas:

  • Es posible que deba cambiar las dos líneas de D:\setup.exe a la ruta del directorio de instalación.
  • Es posible que deba reiniciar su sistema antes de ejecutar esto.
  • Deseará ejecutar el archivo por lotes desde un símbolo del sistema elevado para que UAC no lo interrumpa en cada iteración.

Realicé pruebas en tres sistemas diferentes:

  • Una VM con Windows 10 con 4 núcleos y almacenamiento SSD
    Prueba de referencia de 4 x 8 MB y luego 4 x 1024 MB
  • Una VM con Windows 10 con 8 núcleos y almacenamiento PCIe
    Prueba de referencia de 4 x 8 MB, 4 x 1024 MB, 8 x 1024 MB
  • Una máquina virtual con Windows 2012 R2 con 16 núcleos y una matriz RAID 10 de dos canales de 8 unidades SAS de 10K
    Prueba de referencia de 4 x 8 MB, 4 x 1024 MB, 8 x 1024 MB y 16 x 1024 MB

Los archivos de salida generaron un montón de declaraciones de inserción que podría pegar aquí:

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

Estos fueron los tiempos en diez pruebas cada uno, promediados y redondeados (haga clic para ampliar):

Como era de esperar, IFI se vuelve importante con archivos más grandes en unidades más lentas

La configuración tarda un poco más de un minuto en todos los ámbitos (qué bueno es ejecutar la configuración sin herramientas de administración). La única desviación, en realidad, fue cuando el tamaño de los archivos comenzó a aumentar en las unidades mecánicas y con la inicialización instantánea de archivos deshabilitada. No puedo pretender estar sorprendido por esto.

Conclusión

Si está en SSD o PCIe, la inicialización instantánea de archivos no puede empeorar las cosas, pero no hay un beneficio claro durante la configuración, siempre que las limitaciones de tamaño de archivo arcaicas para los archivos de datos tempdb permanezcan intactas. Con las reglas actuales, no parece posible probar este impacto más allá de (1 GB x la cantidad de núcleos disponibles). Sin embargo, si tiene unidades mecánicas lentas, hay una diferencia notable, incluso cuando solo inicializa 8 GB o 16 GB de datos:poner a cero es bastante costoso cuando las cabezas del disco tienen que moverse. Dicho esto, si la configuración demora 75 segundos o 2 minutos es bastante intrascendente en el gran esquema de las cosas (a menos que esté instalando cientos de servidores, pero no los esté automatizando por alguna razón), así que creo que la mayor ventaja aquí es la conveniencia, no tener que recordar otorgar a la cuenta de servicio los derechos de volumen necesarios algún tiempo después de que la instalación haya tenido éxito. Si lo piensa, esta nueva opción de configuración en realidad puede dar mejores resultados en instalaciones automatizadas de una gran cantidad de servidores, además del tiempo ahorrado durante la instalación real.

  • Descargue los archivos de configuración y el archivo por lotes

(Mi próxima prueba analizará el tiempo que lleva expandir los archivos tempdb existentes a un tamaño mucho mayor que 1024 MB después de la instalación .)