Inicialización instantánea de archivos de la base de datos

Se aplica a: síSQL Server (todas las versiones admitidas)

En este artículo, obtendrá información sobre la inicialización instantánea de archivos y cómo habilitar esta opción para acelerar el crecimiento de los archivos de base de datos de SQL Server.

De forma predeterminada, los archivos de datos y registro se inicializan para sobrescribir los datos existentes que los archivos eliminados anteriormente hayan dejado en el disco. Los archivos de datos y registro se inicializan por primera vez llenando los archivos con ceros al realizar las operaciones siguientes:

  • Crear una base de datos.
  • Agregue archivos de registro o datos a una base de datos existente.
  • Aumentar el tamaño de un archivo existente (incluidas las operaciones de crecimiento automático).
  • Restaurar una base de datos o un grupo de archivos.

En SQL Server, la inicialización instantánea de archivos (IFI) permite una ejecución más rápida de las operaciones de archivo mencionadas anteriormente, ya que recupera el espacio en disco usado sin llenar el espacio con ceros. En lugar de eso, el contenido del disco se sobrescribe al escribir nuevos datos en los archivos. Los archivos de registro no se pueden inicializar de forma instantánea.

Habilitación de la inicialización instantánea de archivos

La inicialización instantánea de archivos solo está disponible si se ha concedido SE_MANAGE_VOLUME_NAME a la cuenta de inicio del servicio SQL Server. Los miembros del grupo de administradores de Windows tienen este derecho y pueden concederlo a otros usuarios añadiéndolos a la directiva de seguridad Realizar tareas de mantenimiento del volumen .

Importante

Ciertos usos de la característica, como el Cifrado de datos transparente (TDE), pueden evitar la inicialización instantánea de archivos.

Nota

A partir de SQL Server 2016 (13.x), este permiso se puede conceder a la cuenta de servicio durante la instalación.

Si usa la instalación de línea de comandos, agregue el argumento /SQLSVCINSTANTFILEINIT o active la casilla Conceder el privilegio de realización de tareas de mantenimiento de volumen al servicio del motor de la base de datos de SQL Server en el asistente para la instalación.

Para conceder a una cuenta el permiso Perform volume maintenance tasks :

  1. En el equipo en el que se creará el archivo de datos, abra la aplicación Directiva de seguridad local (secpol.msc).

  2. En el panel izquierdo, expanda Directivas locales y, a continuación, haga clic en Asignación de derechos de usuario.

  3. En el panel derecho, haga doble clic en Realizar tareas de mantenimiento del volumen.

  4. Haga clic en Agregar usuario o grupo y agregue la cuenta que ejecuta el servicio SQL Server.

  5. Haga clic en Aplicar y, a continuación, cierre todos los cuadros de diálogo de Directiva de seguridad local .

  6. Reinicie el servicio SQL Server.

  7. Compruebe el registro de errores de SQL Server en el inicio.

    Se aplica a: SQL Server (A partir de SQL Server 2012 (11.x) SP4, SQL Server 2014 (12.x) SP2, SQL Server 2016 (13.x) y versiones posteriores).

    1. Si la cuenta de inicio del servicio SQL Server tiene concedido SE_MANAGE_VOLUME_NAME, se registra un mensaje informativo que es similar al siguiente:

      Database Instant File Initialization: enabled. For security and performance considerations see the topic 'Database Instant File Initialization' in SQL Server Books Online. This is an informational message only. No user action is required.

    2. Si la cuenta de inicio del servicio SQL Server no tiene concedido SE_MANAGE_VOLUME_NAME, se registra un mensaje informativo que es similar al siguiente:

      Database Instant File Initialization: disabled. For security and performance considerations see the topic 'Database Instant File Initialization' in SQL Server Books Online. This is an informational message only. No user action is required.

    Nota

    También se puede usar la columna instant_file_initialization_enabled en el DMV sys.dm_server_services para identificar si la inicialización instantánea de archivos está habilitada.

Consideraciones sobre la seguridad

Se recomienda habilitar la inicialización instantánea de archivos, ya que las ventajas pueden compensar el riesgo de seguridad.

Al usar la inicialización instantánea de archivos, el contenido del disco eliminado solo se sobrescribe cuando se escriben datos nuevos en los archivos. Por este motivo, una entidad de seguridad no autorizada puede acceder al contenido eliminado hasta que se escriban otros datos en una área específica del archivo de datos.

Mientras el archivo de la base de datos se adjunte a la instancia de SQL Server, este riesgo de divulgación de la información se reduce mediante la lista de control de acceso discrecional (DACL) del archivo. Esta DACL permite acceder al archivo solo a la cuenta de servicio SQL Server y al administrador local. Sin embargo, cuando el archivo está separado, un usuario o servicio que no tenga SE_MANAGE_VOLUME_NAME puede acceder a él.

Existen consideraciones similares cuando:

  • Se realiza una copia de seguridad de la base de datos. Si el archivo de copia de seguridad no está protegido con una DACL adecuada, el contenido eliminado puede estar disponible para un usuario o servicio no autorizado.

  • Un archivo se aumenta con IFI. Un administrador de SQL Server podría acceder a los contenidos de la página sin procesar y ver el contenido que se ha eliminado anteriormente.

  • Los archivos de la base de datos se hospedan en una red de área de almacenamiento. También es posible que esta red de área de almacenamiento presente siempre nuevas páginas como inicializadas previamente y que configurar el sistema operativo para que vuelva a inicializar las páginas cree una sobrecarga innecesaria.

Si le preocupa la posibilidad de que se divulgue contenido eliminado, realice una de las acciones siguientes o ambas:

  • Asegúrese siempre de que los archivos separados y los archivos de copia de seguridad tienen DACL restrictivas.

  • Deshabilite la inicialización instantánea de archivos para la instancia de SQL Server. Para ello, revoque SE_MANAGE_VOLUME_NAME de la cuenta de inicio del servicio SQL Server.

    Nota

    Si se deshabilita, aumentará el tiempo de asignación de los archivos de datos y solo afecta a los archivos que se han creado o se ha aumentado su tamaño después de que el derecho del usuario se revocara.

Derecho de usuario SE_MANAGE_VOLUME_NAME

El privilegio de usuario SE_MANAGE_VOLUME_NAME se puede asignar en el applet Directiva de seguridad local de Herramientas administrativas de Windows. En Directivas locales, seleccione Asignación de derechos de usuario y modifique la propiedad Realizar tareas de mantenimiento del volumen.

Consideraciones de rendimiento

El proceso de inicialización de archivos de base de datos escribe ceros en las nuevas regiones del archivo durante la inicialización. La duración de este proceso depende del tamaño de la parte del archivo que se inicialice y del tiempo de respuesta y la capacidad del sistema de almacenamiento. Si la inicialización tarda mucho, es posible que vea que se registran los mensajes siguientes en el registro de errores de SQL Server y en el registro de aplicaciones.

Msg 5144
Autogrow of file '%.*ls' in database '%.*ls' was cancelled by user or timed out after %d milliseconds.  Use ALTER DATABASE to set a smaller FILEGROWTH value for this file or to explicitly set a new file size.
Msg 5145
Autogrow of file '%.*ls' in database '%.*ls' took %d milliseconds.  Consider using ALTER DATABASE to set a smaller FILEGROWTH for this file.

Un crecimiento automático prolongado de un archivo de base de datos o de registro de transacciones puede producir problemas de rendimiento de las consultas. Esto se debe a que una operación en la que se necesita el crecimiento automático de un archivo conservará recursos como bloqueos o bloqueos temporales mientras dure la operación de crecimiento del archivo. Es posible que vea esperas largas en bloqueos temporales para las páginas de asignación. La operación que necesita el crecimiento automático prolongado mostrará un tipo de espera de PREEMPTIVE_OS_WRITEFILEGATHER.

Consulte también

CREATE DATABASE (Transact-SQL de SQL Server)