Compartir a través de


Reducir una base de datos

Es posible reducir cada archivo de una base de datos con el fin de eliminar las páginas que no se utilizan. Aunque Motor de base de datos aprovechará el espacio de manera efectiva, existen ocasiones en las que un archivo no tiene por qué ser tan grande como lo era anteriormente. En estos casos, la reducción del archivo puede ser necesaria. Pueden reducirse los archivos de datos y los archivos de registro de transacciones. Los archivos de la base de datos se pueden reducir manualmente, en grupo o de uno en uno; también se puede configurar la base de datos para que se reduzca automáticamente a intervalos determinados.

Los archivos se reducen siempre desde el final. Por ejemplo, si tiene un archivo de 5 GB y especifica 4 GB como target_size en una instrucción DBCC SHRINKFILE, Motor de base de datos liberará tanto espacio como pueda a partir del último GB del archivo. Si hay páginas utilizadas en la parte del archivo que se va a liberar, Motor de base de datos reasigna primero las páginas a la parte que se conserva. Sólo se puede reducir una base de datos hasta el punto en el que no le quede espacio disponible. Por ejemplo, si una base de datos de 5 GB tiene 4 GB de datos y especifica 3 GB como target_size de una instrucción DBCC SHRINKFILE, sólo se liberará 1 GB.

Reducción automática de una base de datos

Cuando la opción de base de datos AUTO_SHRINK se establece en ON, Motor de base de datos reduce automáticamente las bases de datos que tienen espacio disponible. Esta opción se establece mediante la instrucción ALTER DATABASE. De forma predeterminada, la opción está establecida en OFF. Motor de base de datos examina periódicamente el uso del espacio en cada base de datos. Si una base de datos tiene la opción AUTO_SHRINK establecida en ON, Motor de base de datos reduce el tamaño de los archivos de esa base de datos. Esta actividad se lleva a cabo en segundo plano y no afecta a las operaciones que realiza el usuario con la base de datos.

Para establecer que una base de datos se reduzca automáticamente

ALTER DATABASE (Transact-SQL)

Reducción manual de la base de datos

Puede reducir manualmente una base de datos o los archivos de la base de datos mediante la instrucción DBCC SHRINKDATABASE o la instrucción DBCC SHRINKFILE. Si una instrucción DBCC SHRINKDATABASE o DBCC SHRINKFILE no puede recuperar todo el espacio especificado de un archivo de registro, la instrucción emitirá un mensaje informativo indicando la acción que debe llevar a cabo para liberar más espacio. Para obtener más información sobre la reducción de los archivos de registro, vea Reducir el registro de transacciones.

Las operaciones DBCC SHRINKDATABASE y DBCC SHRINKFILE pueden detenerse en cualquier momento del proceso y el trabajo que se haya completado se conserva.

Al utilizar la instrucción DBCC SHRINKDATABASE, no es posible reducir toda una base de datos inferior a su tamaño original. Por lo tanto, si se creó una base de datos con un tamaño de 10 MB y ha crecido hasta llegar a 100 MB, sólo podrá reducirla hasta un tamaño de 10 MB, aunque todos los datos de la base de datos se hayan eliminado.

No obstante, puede reducir uno a uno los archivos de la base de datos por debajo de su tamaño inicial con la instrucción DBCC SHRINKFILE. Por lo tanto, deberá reducir cada archivo individualmente, en vez de intentar reducir toda la base de datos.

Nota

No se puede reducir la base de datos o el registro de transacciones mientras se realiza una copia de seguridad de la base de datos o del registro de transacciones. Del mismo modo, no se puede crear una copia de seguridad de la base de datos o del registro de transacciones mientras se reduce la base de datos o el registro de transacciones.

Para reducir una base de datos

Para reducir un archivo de datos o de registro

Reducir el registro de transacciones

Hay límites fijos para la reducción del archivo de registro de transacciones. El tamaño de los archivos de registro virtuales determina las posibles reducciones de tamaño. En consecuencia, no se puede reducir el archivo de registro a un tamaño inferior que el archivo de registro virtual. Además, el archivo de registro se reduce en incrementos iguales al tamaño del archivo de registro virtual. Por ejemplo, un archivo de registro de transacciones de 1 GB puede estar compuesto por cinco archivos de registro virtuales de 200 MB cada uno. Si reduce el archivo de registro de transacciones, se eliminarán los archivos de registro virtuales no utilizados; no obstante, quedarán como mínimo dos archivos de registro virtuales. Dado que cada archivo de registro virtual del ejemplo es de 200 MB, el registro de transacciones podrá reducirse hasta un tamaño mínimo de 400 MB, y sólo en incrementos de 200 MB. Para que un archivo de registro de transacciones pueda reducirse a un tamaño inferior, cree un registro de transacciones pequeño y permita que crezca automáticamente, en vez de crear un archivo de registro de transacciones de gran tamaño.

Una operación DBCC SHRINKDATABASE o DBCC SHRINKFILE intenta inmediatamente reducir un archivo de registro de transacciones al tamaño solicitado (sujeto a redondeo). Debería realizar una copia de seguridad del archivo de registro antes de reducir el archivo, para reducir el tamaño del registro lógico y marcar como inactivos los registros virtuales que no contienen parte alguna del registro lógico. Para obtener más información, vea Reducir el registro de transacciones.

Prácticas recomendadas

Considere la siguiente información cuando desee reducir un archivo o base de datos:

  • La reducción es más efectiva después de una operación que cree mucho espacio no utilizado, como por ejemplo, una operación para truncar o eliminar tablas.

  • La mayoría de las bases de datos requieren que haya espacio disponible para realizar las operaciones diarias normales. Si se reduce una base de datos de forma reiterada y su tamaño vuelve a aumentar, esto indica que el espacio que se redujo es necesario para las operaciones habituales. En estos casos, no sirve reducir la base de datos reiteradamente.

  • La reducción no mantiene el estado de fragmentación de los índices de la base de datos y generalmente aumenta la fragmentación hasta cierto punto. Por ejemplo, no se debe reducir una base de datos o archivo de datos después de volver a generar los índices. Esta es otra razón para no reducir la base de datos reiteradamente.

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

Niveles de aislamiento basados en el control de versiones de filas y operaciones de reducción

Es posible que una transacción que se ejecute en un nivel de aislamiento basado en el control de versiones de filas pueda bloquear las operaciones de reducción. Por ejemplo, si una gran operación de borrado que se ejecuta en un nivel de aislamiento basado en el control de versiones de filas se halla en curso cuando se ejecuta una operación DBCC SHRINK DATABASE, la operación de reducción esperará a que la operación de borrado finalice antes de reducir los archivos. Cuando esto sucede, las operaciones DBCC SHRINKFILE y DBCC SHRINKDATABASE imprimen un mensaje informativo (5202 en el caso de SHRINKDATABASE y 5203 en el caso de SHRINKFILE) en el registro de errores de SQL Server cada cinco minutos durante la primera hora, y cada hora sucesivamente. Para obtener más información, vea DBCC SHRINKDATABASE (Transact-SQL).