Reducir el registro de transacciones

Si sabe que un archivo de registro de transacciones contiene espacio no utilizado que no va a necesitar, puede reclamar el exceso de espacio reduciendo el tamaño del registro de transacciones. Este proceso se denomina reducir el archivo de registro.

La reducción sólo se puede realizar mientras la base de datos está conectada y existe al menos un archivo de registro virtual libre. En algunos casos, no será posible reducir el registro hasta el siguiente truncamiento del registro.

[!NOTA]

Normalmente, el truncamiento se produce automáticamente bajo el modelo de recuperación simple cuando se realiza una copia de seguridad de la base de datos y bajo el modelo de recuperación completa cuando se realiza una copia de seguridad del registro de transacciones. Sin embargo, varios factores pueden retrasar el truncamiento. Para obtener más información, vea Factores que pueden ralentizar el truncamiento del registro.

Para reducir un archivo de registro (sin reducir los archivos de base de datos)

Para supervisar los eventos de reducción de un archivo de registro

To monitor log space

[!NOTA]

La reducción de los archivos de base de datos y registro se puede establecer para que se produzca automáticamente. Sin embargo, no recomendamos realizar una reducción automática, y la propiedad de base de datos autoshrink está establecida en FALSE de forma predeterminada. Si autoshrink está establecida en TRUE, el proceso de reducción automática sólo reduce el tamaño de un archivo cuando más del 25% de su espacio está sin utilizar. El tamaño del archivo se reduce hasta un tamaño en el que sólo el 25% del archivo corresponde al espacio sin utilizar o hasta el tamaño original del archivo (el que sea mayor). Para obtener información sobre cómo cambiar el valor de la propiedad autoshrink, vea Cómo ver o cambiar las propiedades de una base de datos (SQL Server Management Studio) (uso de la propiedad Auto Shrink en la página Opciones) o Opciones de ALTER DATABASE SET (Transact-SQL) (uso de la opción AUTO_SHRINK).

¿Cómo funciona la reducción del archivo de registro?

Esto se puede hacer mediante la eliminación de uno o más archivos de registro virtuales inactivos. La unidad de reducción del tamaño es siempre el archivo de registro virtual. Por ejemplo, si tiene un archivo de registro de 600 megabytes (MB) que se ha dividido en seis registros virtuales de 100 MB, el tamaño del archivo de registro se puede reducir únicamente en incrementos de 100 MB. El tamaño del archivo se puede reducir a tamaños como 500 MB o 400 MB, pero no se puede reducir a tamaños como 433 MB o 525 MB. Un archivo de registro virtual que contenga entradas de registro activas, es decir, un archivo de registro virtual activo, es parte del registro lógico y no puede eliminarse. Para obtener más información, vea Arquitectura física del registro de transacciones.

[!NOTA]

Database Engine (Motor de base de datos) elige dinámicamente el tamaño del archivo de registro virtual cuando se crean o se extienden archivos de registro. Para obtener más información, vea Arquitectura física del registro de transacciones.

En un archivo de registro, el tamaño actual es el mismo que el tamaño total de las páginas utilizadas por los archivos de registro virtuales. Tenga en cuenta, sin embargo, que las páginas no son utilizadas por los archivos de registro. Los archivos de registro virtuales que albergan parte del registro lógico no se pueden liberar. Si todos los archivos de registro virtuales de un archivo de registro albergan parte del registro lógico, no se podrá reducir el archivo. La reducción no será posible hasta que el truncamiento del registro marque como inactivos uno o más archivos de registro virtuales.

Una operación de reducción de archivo sólo puede eliminar los archivos de registro virtuales inactivos. Si no se especifica un tamaño final, una operación de reducción de archivo sólo quitará los archivos de registro virtuales inactivos que superen el último archivo de registro virtual activo. Si se especifica un tamaño final, una determinada operación de reducción de archivo sólo eliminará los archivos de registro virtuales inactivos suficientes para aproximarse al tamaño final, pero no superarlo. Por lo general, después de la reducción el archivo de registro es algo mayor que el tamaño final y no podrá ser nunca más pequeño. Los archivos de registro virtuales hacen que resulte difícil predecir cuánto se reducirá realmente el archivo de registro.

Cuando se reduce algún archivo, el espacio liberado debe proceder del final del archivo. Cuando se reduce un archivo de registro de transacciones, se liberan suficientes archivos de registro virtual del final del archivo de registro para reducir el registro al tamaño solicitado por el usuario. El valor de target_size especificado por el usuario se redondea al siguiente límite de archivo de registro virtual más alto. Por ejemplo, si un usuario especifica un valor de target_size de 325 MB para nuestro archivo de ejemplo de 600 MB que contiene seis archivos de registro virtual de 100 MB, los dos últimos archivos de registro virtuales se eliminan y el tamaño del nuevo archivo es 400 MB.

Una operación DBCC SHRINKDATABASE o DBCC SHRINKFILE intenta reducir inmediatamente el archivo de registro físico al tamaño solicitado:

  • Si ninguna parte del registro lógico de los archivos de registro virtual se extiende más allá de la marca target_size, los archivos de registro virtual que van después de la marca target_size se liberan y la instrucción DBCC finaliza correctamente, sin mensajes.

Si parte del registro lógico de los registros virtuales se extiende más allá de la marca target_size, el SQL Server Database Engine (Motor de base de datos de SQL Server) libera tanto espacio como sea posible y emite un mensaje informativo. El mensaje indica las acciones que se deben llevar a cabo para quitar el registro lógico de los registros virtuales al final del archivo. Tras llevar a cabo esta acción, puede volver a emitir la instrucción DBCC para liberar el espacio restante.

Por ejemplo, suponga que un archivo de registro de 600 MB que contiene seis archivos de registro virtuales tiene un registro lógico que comienza en el registro virtual 3 y termina en el registro virtual 4 cuando se ejecuta una instrucción DBCC SHRINKFILE con un valor de target_size de 275 MB, que corresponde a las tres cuartas partes del tramo en el registro virtual 3:

Archivo de registro con 6 archivos de registro virtuales antes de la reducción

Los archivos de registro virtual 5 y 6 se liberan inmediatamente, porque no contienen ninguna parte del registro lógico. Sin embargo, para lograr el valor de target_size especificado, el archivo de registro virtual 4 también se debería liberar, pero no puede porque alberga la parte final del registro lógico. Tras liberar los archivos de registro virtual 5 y 6, el Database Engine (Motor de base de datos)llena la parte restante del archivo de registro virtual 4 con entradas de registro ficticias. Esto fuerza que el final del archivo de registro sea el archivo de registro virtual 1. En la mayoría de los sistemas, todas las transacciones que comienzan en el archivo de registro virtual 4 se confirmarán en segundos. Esto significa que toda la parte activa del registro se mueve al archivo de registro virtual 1. El archivo de registro tiene ahora el siguiente aspecto:

El archivo de registro se reduce a 4 archivos virtuales

La instrucción DBCC SHRINKFILE emite también un mensaje informativo que indica que no pudo liberar todo el espacio solicitado y que puede ejecutar una instrucción BACKUP LOG para liberar el espacio restante. Después de que la parte activa del registro se mueva al archivo de registro virtual 1, una instrucción BACKUP LOG truncará todo el registro lógico que hay en el archivo de registro virtual 4:

Resultados del archivo de registro después de truncar el registro

Puesto que el archivo de registro virtual 4 ya no alberga ninguna parte del registro lógico, ahora puede ejecutar la misma instrucción DBCC SHRINKFILE con un valor de target_size de 275 MB. A continuación, el archivo de registro virtual 4 se liberará y el tamaño del archivo de registro físico se reducirá al tamaño que haya solicitado.

[!NOTA]

Algunos factores, como una transacción de larga duración, pueden mantener activos los archivos de registro virtuales durante un periodo amplio. Esto puede restringir la reducción del registro o incluso impedir que el registro se reduzca en absoluto. Para obtener más información, vea Factores que pueden ralentizar el truncamiento del registro.