Inicialización instantánea de archivos de la base de datos
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 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 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.
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.
La inicialización instantánea de archivos se permite para el crecimiento del registro de transacciones en las bases de datos que tienen habilitado el cifrado de datos transparente (TDE) debido a la naturaleza de cómo se expande el archivo de registro de transacciones y el hecho de que el registro de transacciones se escribe en serie.
- La inicialización instantánea de archivos está en uso para los niveles de Uso General y Crítico para la empresa de la base de datos de Azure SQL y Azure SQL Managed Instance solo para beneficiar 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 sólo está disponible si a la cuenta de inicio del servicio SQL Server se le concede SE_MANAGE_VOLUME_NAME
. 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 . El derecho SE_MANAGE_VOLUME_NAME
no es necesario para la inicialización instantánea de archivos de los 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).
Importante
Ciertos usos de la característica, como el cifrado de datos transparente (TDE), pueden evitar la inicialización instantánea de archivos (IFI). A partir de SQL Server 2022 (16.x) y en la base de datos de Azure SQL y Azure SQL Managed Instance, IFI se permite en el registro de transacciones. Para más información, consulte Inicialización instantánea de archivos y el registro de transacciones.
A partir de SQL Server 2016 (13.x) y versiones posteriores, este permiso se puede conceder a la cuenta de servicio durante la instalación.
Si utiliza la instalación de símbolo del sistema, añada 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 instalación.
Para conceder a una cuenta el permiso Perform volume maintenance tasks
:
En el equipo en el que se creará el archivo 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 de la derecha, haga doble clic en Realizar tareas de mantenimiento del volumen.
Seleccione Agregar usuario o grupo y agregue la cuenta del servicio SQL Server.
Seleccione Aplicary, a continuación, cierre todos los cuadros de diálogo de Directiva de seguridad local.
Reinicie el servicio SQL Server.
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 y SQL Server 2016 (13.x) y posteriores).
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 ejemplo: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 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 ejemplo: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_enabled
en 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 podría 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. Con esta DACL, solamente la cuenta de servicio de SQL Server y el administrador local pueden acceder al archivo. Pero cuando el archivo esté desasociado, un usuario o servicio que no tenga SE_MANAGE_VOLUME_NAME
podrá 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 startup 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 sobre el 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. 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
.