Reducción de archivo

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance

En este artículo se describe cómo reducir un archivo de registro o datos en SQL Server mediante SQL Server Management Studio o Transact-SQL.

La reducción de los archivos de datos permite recuperar espacio moviendo páginas de datos del final del archivo a espacio desocupado próximo al principio del archivo. Cuando se crea suficiente espacio libre al final del archivo, las páginas de datos situadas al final del archivo pueden desasignarse y devolverse al sistema de archivos.

Limitaciones

  • El archivo de datos principal no puede reducirse a un tamaño menor que el del archivo principal de la base de datos model.

Recomendaciones

  • Una reducción es más efectiva después de una operación que genera mucho espacio de almacenamiento no utilizado, como por ejemplo, una instrucción DELETE a gran escala, una operación para truncar una tabla o una operación para eliminar tablas.

  • La mayoría de las bases de datos requieren que haya espacio disponible para realizar las operaciones diarias normales. Si reduce un archivo de base de datos de forma reiterada y advierte que su tamaño vuelve a aumentar, esto es señal de que el espacio disponible es necesario para las operaciones normales. En estos casos, reducir el archivo de base de datos reiteradamente no sirve para nada. Los eventos de crecimiento automático necesarios para aumentar el archivo de base de datos perjudican al rendimiento.

  • Los datos que se mueven para reducir un archivo se pueden dispersar en cualquier ubicación disponible en el archivo. Esto produce la fragmentación de índices y puede reducir el rendimiento de las consultas que buscan un intervalo del índice. Para eliminar la fragmentación, considere la posibilidad de volver a generar los índices en el archivo después de la reducción.

  • A menos que tenga un requisito específico, no establezca la opción de base de datos AUTO_SHRINK en ON.

Comentarios

Las operaciones de reducción en curso pueden bloquear otras consultas en la base de datos; asimismo, las consultas ya están en curso pueden impedir que se lleven a cabo. Las operaciones de reducción de archivos, incluidas a partir de SQL Server 2022 (16.x), tienen una opción WAIT_AT_LOW_PRIORITY. Esta característica es una nueva opción extra para DBCC SHRINKDATABASE y DBCC SHRINKFILE. Si una nueva operación de reducción en modo WAIT_AT_LOW_PRIORITY no puede obtener los bloqueos necesarios debido a que hay una consulta de larga duración ya en curso, la operación de reducción agotará el tiempo de espera transcurrido un minuto y se cerrará de manera imperceptible, lo que impide que se bloqueen otras consultas. WAIT_AT_LOW_PRIORITY se aplica a los archivos de datos (.mdf y .ndf). No se aplica a los archivos de registro de transacciones. Para obtener más información, consulte DBCC SHRINKFILE.

Permisos

Debe pertenecer al rol fijo de servidor sysadmin o al rol fijo de base de datos db_owner .

Usar SQL Server Management Studio (SSMS)

Reducir un archivo de datos o de registro con SSMS

  1. En el Explorador de objetos, conéctese a una instancia del Motor de base de datos de SQL Server y expándala.

  2. Expanda Bases de datos y, después, haga clic con el botón derecho en la base de datos que quiera reducir.

  3. Seleccione Tareas, Reducir y después Archivos.

    Base de datos
    Muestra el nombre de la base de datos de seleccionada.

    Tipo de archivo
    Seleccione el tipo de archivo. Las opciones disponibles son Datos y Registro . El valor predeterminado es Datos. Si se selecciona un tipo de grupo de archivos diferente, la selección de los demás campos también cambia.

    Grupo de archivos
    Seleccione un grupo de archivos en la lista de grupos de archivos asociados al Tipo de archivo seleccionado anteriormente. Si se selecciona un grupo de archivos diferente, la selección de los demás campos también cambia.

    Nombre de archivo
    Elija un archivo en la lista de archivos disponibles del grupo de archivos y del tipo de archivo seleccionados.

    Ubicación
    Muestra la ruta de acceso completa al archivo seleccionado. La ruta no se puede editar, pero se puede copiar al Portapapeles.

    Espacio asignado actualmente
    Para los archivos de datos, muestra el espacio asignado actualmente. En los archivos de registro, muestra el espacio asignado, calculado a partir del resultado de DBCC SQLPERF(LOGSPACE).

    Espacio disponible
    En los archivos de datos, muestra el espacio disponible, calculado a partir del resultado de DBCC SHOWFILESTATS(fileid). En los archivos de registro, muestra el espacio disponible, calculado a partir del resultado de DBCC SQLPERF(LOGSPACE).

    Liberar espacio no utilizado
    Hace que se libere el espacio no utilizado de los archivos para el sistema operativo y reduce el archivo a la última extensión asignada, lo que disminuye el tamaño del archivo sin mover los datos. No se realiza ningún intento de reubicación de las filas en páginas no asignadas.

    Reorganizar páginas antes de liberar espacio no utilizado
    Equivale a ejecutar DBCC SHRINKFILE con la especificación del tamaño del archivo de destino. Si se selecciona esta opción, el usuario debe especificar el tamaño del archivo de destino en el cuadro Reducir el archivo a .

    Reducir el archivo a
    Especifica el tamaño del archivo de destino para la operación de reducción. El tamaño no puede ser inferior al espacio asignado actual ni superior a la extensión total asignada al archivo. Si se introduce un valor inferior al mínimo o superior al máximo, se restablecerá el valor mínimo o máximo cuando cambie el foco o cuando se seleccionan los botones de la barra de herramientas.

    Vaciar el archivo migrando los datos a otros archivos del mismo grupo de archivos
    Migra todos los datos del archivo especificado. Esta opción permite que el archivo se pueda quitar mediante la instrucción ALTER DATABASE. Esta opción equivale a ejecutar DBCC SHRINKFILE con la opción EMPTYFILE. EMPTYFILE no se admite en Hiperescala de Azure SQL Database o Azure SQL Database.

  4. Seleccione el tipo y el nombre del archivo.

  5. También puede activar la casilla Liberar espacio no utilizado .

    Si activa esta opción, el espacio no utilizado del archivo se libera al sistema operativo y el archivo se reduce a la última extensión asignada. De esta forma, se reduce el tamaño del archivo sin necesidad de mover datos.

  6. También puede seleccionar la casilla Reorganizar archivos antes de liberar espacio no utilizado . Si activa esta opción, debe especificar el valor Reducir el archivo a . De forma predeterminada, esta opción no está activada.

    Si activa esta opción, el espacio no utilizado del archivo se libera al sistema operativo y se intentan reubicar las filas en páginas no asignadas.

  7. De manera opcional, especifique el porcentaje máximo de espacio disponible que desee dejar en el archivo de la base de datos después de reducirla. Los valores válidos están comprendidos entre 0 y 99. Esta opción solo está disponible cuando la opción Reorganizar archivos antes de liberar espacio no utilizado está habilitada.

  8. De manera opcional, active la casilla Vaciar el archivo migrando los datos a otros archivos del mismo grupo de archivos .

    Si activa esta opción, los datos se mueven del archivo especificado a otros archivos del grupo de archivos. A continuación, el archivo vacío puede eliminarse. Esta opción equivale a ejecutar DBCC SHRINKFILE con la opción EMPTYFILE.

  9. Seleccione Aceptar.

Uso de Transact-SQL

Reducir un archivo de datos o de registro con Transact-SQL

  1. Conéctese con el Motor de base de datos.

  2. En la barra Estándar, seleccione Nueva consulta.

  3. Copie y pegue el ejemplo siguiente en la ventana de consulta y seleccione Ejecutar. Este ejemplo usa DBCC SHRINKFILE para reducir a 7 MB el tamaño de un archivo de datos denominado DataFile1 de la base de datos UserDB .

USE UserDB;
GO
DBCC SHRINKFILE (DataFile1, 7);
GO