Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
En este artículo, obtendrá información sobre la inicialización instantánea de archivos (IFI) y cómo habilitarla 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 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 su lugar, el contenido del disco antiguo se sobrescribe a medida que se escriben nuevos datos en los archivos.
En la base de datos de Azure SQL y Azure SQL Managed Instance, la inicialización instantánea de archivos solo está disponible para archivos de registro de transacciones.
Inicialización instantánea de archivos y registro de transacciones
Se aplica a: SQL Server 2022 (16.x) y versiones posteriores, la base de datos de Azure SQL y Azure SQL Managed Instance.
Históricamente, los archivos de registro de transacciones no se pudieron inicializar instantáneamente. Sin embargo, a partir de SQL Server 2022 (16.x) (todas las ediciones) y en la base de datos de Azure SQL y Azure SQL Managed Instance, la inicialización instantánea de archivos puede beneficiarse de los eventos de crecimiento automático del registro de transacciones de hasta 64 MB. El incremento de tamaño de crecimiento automático predeterminado para las bases de datos nuevas es de 64 MB. Los eventos de crecimiento automático del archivo de registro de transacciones mayores de 64 MB no pueden beneficiarse de la inicialización instantánea de archivos.
A diferencia de la inicialización instantánea de archivos de datos, que se impide si se habilita el cifrado de datos transparente (TDE), se permite la inicialización instantánea de archivos para el crecimiento del registro de transacciones en las bases de datos que tienen TDE habilitado, debido a cómo crece el archivo de registro de transacciones y el hecho de que el registro de transacciones se escribe en una serie.
La inicialización instantánea de archivos está en uso para los niveles de uso general y crítico de negocio de Azure SQL Database e instancia administrada de Azure SQL, únicamente para facilitar el crecimiento de los archivos de registro de transacciones.
La inicialización instantánea de archivos no se puede configurar en la base de datos de Azure SQL y Azure SQL Managed Instance.
Habilitación de la inicialización instantánea de archivos
La inicialización instantánea de archivos de datos solo está disponible si se concede el SE_MANAGE_VOLUME_NAME privilegio a la cuenta de servicio o al SID de servicio del servicio motor de base de datos. Los miembros del grupo Administradores de Windows tienen este derecho y pueden concederlo a otros usuarios agregándolos a la directiva de seguridad Realizar tareas de mantenimiento de volúmenes. El SE_MANAGE_VOLUME_NAME privilegio no es necesario para la inicialización instantánea de archivos de eventos de crecimiento de hasta 64 MB en el registro de transacciones, que se introdujo con la versión de SQL Server 2022 (16.x).
Se recomienda conceder el privilegio SE_MANAGE_VOLUME_NAME al SID de servicio del servicio de motor de base de datos. Esto garantiza que la concesión permanezca incluso si cambia la cuenta de servicio del servicio motor de base de datos. Para obtener más información, consulte Uso de SID de servicio para conceder permisos a los servicios en SQL Server.
Importante
Ciertos usos de la característica, como el cifrado de datos transparente (TDE), pueden evitar la inicialización instantánea de archivos (IFI). En SQL Server 2022 (16.x) y versiones posteriores, y en Azure SQL Database e Azure SQL Managed Instance, se permite IFI en el log de transacciones. Para más información, consulte Inicialización instantánea de archivos y el registro de transacciones.
En SQL Server 2016 (13.x) y versiones posteriores, este permiso se puede conceder al identificador de seguridad (SID) del motor de base de datos en el momento de 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 o un SID de servicio la directiva de seguridad Perform volume maintenance tasks:
En el equipo donde se crearán los archivos de datos, abra la aplicación Directiva de seguridad local (
secpol.msc).En el panel izquierdo, expanda Directivas localesy, a continuación, seleccione Asignación de permisos del usuario.
En el panel derecho, haga doble clic en Realizar tareas de mantenimiento del volumen.
Seleccione Agregar usuario o grupo y agregue la cuenta de servicio del motor de base de datos o su SID de servicio.
Seleccione Aplicary, a continuación, cierre todos los cuadros de diálogo de Directiva de seguridad local.
Reinicie el servicio de Motor de base de datos.
Compruebe el registro de errores del motor de base de datos al iniciarse.
Se aplica a: SQL Server (a partir de SQL Server 2012 (11.x) SP4, SQL Server 2014 (12.x) SP2 y SQL Server 2016 (13.x) y posteriores).
Si se concede el privilegio a la
SE_MANAGE_VOLUME_NAMEcuenta de servicio del motor de base de datos o a su SID de servicio, se registra un mensaje informativo similar al del ejemplo 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.Si no se concedió el
SE_MANAGE_VOLUME_NAMEprivilegio a la cuenta de servicio del motor de base de datos o a su SID de servicio, se registra un mensaje informativo similar al del ejemplo 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
En SQL Server, use el valor de
instant_file_initialization_enableden la vista de administración dinámica de sys.dm_server_services para identificar si la inicialización instantánea de archivos está habilitada para la instancia.
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 utilizar 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. La DACL solo permite el acceso de archivos a la cuenta de servicio de SQL Server, su SID de servicio y el administrador local. Sin embargo, cuando el archivo está desvinculado, es potencialmente accesible por un usuario o servicio que no tenga el privilegio SE_MANAGE_VOLUME_NAME.
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_NAMEde la cuenta de servicio del motor de bases de datos y su SID de servicio.Nota
Deshabilitar IFI aumenta el tiempo de crecimiento de los archivos de datos y solo afecta a los archivos que se crean o aumentan de tamaño después de revocar el privilegio.
privilegios de SE_MANAGE_VOLUME_NAME
El SE_MANAGE_VOLUME_NAME privilegio se puede asignar en herramientas administrativas de Windows, applet de directiva de seguridad local . 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 del archivo de base de datos escribe ceros en las nuevas regiones del archivo en 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. Una operación en la que se necesita el crecimiento automático de un archivo conserva 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 muestra un tipo de espera de PREEMPTIVE_OS_WRITEFILEGATHER.