Reducir el registro de transacciones

Reducir el tamaño físico del registro de transacciones requiere la reducción del propio registro de transacciones. Esto se puede hacer mediante la eliminación de uno o más archivos de registro virtuales inactivos. 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 acerca de los archivos de registro virtuales, vea Arquitectura física del registro de transacciones.

[!NOTA] Si el registro de transacciones no se ha truncado recientemente, es posible que no se pueda reducir el registro hasta que se lleve a cabo el truncamiento. Para obtener más información, vea Factores que pueden ralentizar el truncamiento del registro..

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

La unidad de reducción del tamaño es 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.

[!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 las páginas utilizadas por los archivos de registro virtuales. 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 ningún tamaño final, una operación de reducción de archivo eliminará todos los archivos de registro virtuales inactivos. 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 ejecuta una instrucción DBCC SHRINKFILE con un valor de target_size de 275 MB:

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..

¿Cuándo se reduce el registro?

La reducción del registro puede realizarse mientras la base de datos está conectada. El tamaño de los archivos de registro se reduce físicamente en las situaciones siguientes:

  • Tiene lugar una operación de reducción automática.
  • Se ejecuta una instrucción DBCC SHRINKFILE que hace referencia a un archivo de registro.
  • Se ejecuta una instrucción DBCC SHRINKDATABASE.

Para reducir un archivo de registro

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

Para supervisar el uso del espacio del registro

Vea también

Conceptos

Solucionar problemas de un registro de transacciones lleno (Error 9002)
Configurar las opciones de la base de datos
Trabajar con copias de seguridad del registro de transacciones
Truncamiento del registro de transacciones

Otros recursos

BACKUP (Transact-SQL)
DBCC SHRINKDATABASE (Transact-SQL)
DBCC SHRINKFILE (Transact-SQL)
Asignación y reutilización de espacio

Ayuda e información

Obtener ayuda sobre SQL Server 2005