¿Por qué agregar un usuario de SQL Server a "Realizar tareas de mantenimiento de volumen" mejora tanto la velocidad del cambio de tamaño de la base de datos?

17

Si quiero crear una base de datos de 5GB con

CREATE DATABASE [test]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'test', FILENAME = N'E:\2012\test.mdf' , SIZE = 5529600KB , FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'test_log', FILENAME = N'E:\2012\test_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)

Tarda 1 minuto en mi SSD.

Pero cuando agrego usuario de SQL Server a Perform volume maintenance tasks

ingrese la descripción de la imagen aquí

Solo toma 1-2 segundos .

¿Porqué es eso? ¿Alguien puede explicarme cuáles son las razones de esto?

Nikolay Kostov
fuente
44
¿Pueden los downvoters explicar por qué los downvotes? Esto me parece una buena pregunta.
Thomas Stringer

Respuestas:

26

Eso se debe a la inicialización instantánea de archivos . En resumen, SQL Server puede aprovechar este privilegio para los archivos de datos de la base de datos (no los archivos de registro de transacciones). Lo que esto significa es que SQL Server no tiene que poner a cero los archivos de datos al inicializar.

Sin el privilegio "Realizar tareas de mantenimiento de volumen" otorgado a la cuenta del Servicio SQL, tras la creación de la base de datos, SQL Server necesita poner a cero "test.mdf" y "test_log.ldf".

Con el conjunto de permisos de privilegio "Realizar tareas de mantenimiento de volumen" , SQL Server solo necesita poner a cero "test_log.ldf". Una sobrecarga significativamente menor, por lo tanto, minimiza la duración de la CREATE DATABASEprueba.

Referencias
Cómo y por qué habilitar la inicialización instantánea de archivos Inicialización
instantánea: ¿qué, por qué y cómo?

Thomas Stringer
fuente
Esta costura que es característica es impresionante, pero ¿por qué está desactivada la opción predeterminada?
ahmed abdelqader
1

Esto no afectará a los archivos .ldf (archivos de registro), al menos no de acuerdo con el artículo de MS

¿Por que hacerlo? Velocidad

¿Por qué no hacerlo? Posible riesgo de seguridad. Alguien podría hackear su caja y posiblemente leer los espacios de memoria distintos de cero y recuperar esos datos. Pequeño riesgo, pero sigue siendo un riesgo. Es por eso que no está habilitado de forma predeterminada.

Explicación detallada: cómo y por qué habilitar la inicialización instantánea de archivos

Robert Lee
fuente
Nota para el lector: si le preocupa que la gente piratee su servidor y lea datos antiguos de un archivo eliminado, dejar IFI desactivado puede ser útil, pero no es lo que considero suficiente. Y, si ya tiene un software que sobrescribe los archivos eliminados, entonces probablemente estaría bien activar IFI, ya que ese software ya debería haber puesto a cero el espacio.
RDFozz
Ahora hay una casilla de verificación durante la instalación (SQL 2016 en adelante) para otorgar este derecho a la cuenta de servicio de SQL Server, así que supongo que MS también está un poco más relajado en el frente de seguridad.
Gareth Lyons