miércoles, 1 de noviembre de 2017

SQL Server DBCC SHRINKFILE

Comando DBCC SHRINKFILE

Como se ha establecido, Se trata de un comando de mantenimiento,  cuando mencionamos los Comandos DBCC,  que este comando puede reducir el tamaño del archivo de datos o de registro de transacciones para la base de datos seleccionada, o bien, nos ayuda a vaciar un archivo moviendo los datos del archivo especificado a otros archivos del mismo grupo, lo cual permite quitar el archivo de la base de datos. Puede reducir un archivo a un tamaño menor que el tamaño especificado cuando se creó. De esta forma, se restablece el tamaño mínimo de archivo a un valor nuevo.

Es importante indicar que la reducción de un archivo de datos puede modificarse a un tamaño más pequeño mientras no se tengan datos, ya que cuando se desea reducir el tamaño de un archivo con datos a un tamaño más pequeño que el que tiene, Microsoft SQL Server no lleva a cabo la función, ya que no puede reducir un archivo a un tamaño menor que el que se necesita para almacenar los datos en el archivo.
La sintaxis en su forma más simple es:

USE master;
GO
DBCC SHRINKFILE (file_name);
En el comando se indica que se lleve a cabo la reducción del tamaño del  archivo file_name de la base de datos actualmente seleccionada, al tamaño determinado cuando se creó el archivo.  Es necesario indicar que aunque se puede indicar el identificador correspondiente (file_id), éste es un número que está asociado al nombre de archivo, pero es mas común el uso del nombre correspondiente.

La sintaxis que se usa más a menudo es:
USE master;
GO
DBCC SHRINKFILE (file_name, size);
En el comando se indica que se lleve a cabo la reducción del tamaño del  archivo file_name de la base de datos actualmente seleccionada, al tamaño indicado por size, este se expresa en MB como un número entero. 

Existen algunos argumentos opcionales que pueden ser utilizados con el comando, estos son:

EMPTYFILE
Mueve todos los datos desde el archivo especificado a otros archivos en el mismo grupo de archivos, esto es, no quedaran datos en el archivo indicado para que pueda ser quitado de la base de datos. No obstante, existen ciertas restricciones que deben tomarse en cuenta con los archivos de FILESTREAM.
NOTRUNCATE
Compacta los datos de archivos de datos moviendo páginas asignadas del final de un archivo a páginas no asignadas del principio del archivo. El tamaño objetivo es opcional. NOTRUNCATE solo es aplicable a archivos de datos. No afecta al archivo de registro. Asimismo no se permite su uso en archivos de FILESTREAM.
TRUNCATEONLY
Devuelve al sistema operativo todo el espacio disponible del final del archivo, pero no realiza ningún movimiento de página dentro del archivo. El archivo de datos solo se reduce hasta el último tamaño asignado. El tamaño objetivo se omite si se especifica con TRUNCATEONLY. Este argumento afecta al archivo de registro de transacciones únicamente. De igual forma, no se permite su uso en archivos de FILESTREAM.
WITH NO_INFOMSGS
 Suprime todos los mensajes informativos con niveles de gravedad entre 0 y 10.

Es necesario indicar, que cuando se ejecuta este comando se puede obtener información correspondiente a actividad realizada por la comando, dicha información es:

Columna
Descripción
DbId
Número de identificación de la base de datos del archivo que Microsoft SQL Server intentó reducir.
FileId
Número de identificación del archivo que Microsoft SQL Server intentó reducir.
CurrentSize
El número de páginas que el archivo ocupa actualmente.
MinimumSize
El número de páginas que el archivo podría ocupar, como mínimo. Esto corresponde al tamaño mínimo o tamaño de creación original de un archivo.
UsedPages
El número de páginas que utiliza actualmente el archivo.
EstimatedPages
El número de páginas al que Microsoft SQL Server estima que se puede reducir el archivo.

Nota: Microsoft SQL Server no presentará filas para los archivos que no se reducen

Ejemplos de DBCC SHRINKFILE


Mostraré algunos ejemplos de uso de este comando:

USE master;
GO

DBCC SHRINKFILE (db1_data) WITH NO_INFOMSGS;


Este comando lleva a cabo la reducción del archivo denominado db1 _data que pertenece base de datos db1, al tamaño especificado cuando se creó el archivo, sin emitir mensajes.
USE master;
GO

DBCC SHRINKDATABASE (db1_log, 10);
Este comando lleva a cabo la reducción del archivo denominado db1_log en la base de datos indicada, dejando el tamaño en 10 MB.

USE master;
GO
DBCC SHRINKDATABASE (db1_2_data, EMPTYFILE);
Este comando lleva a cabo el vaciado del archivo denominado db1_2_data en la base de datos indicada, esto mueve todos los datos del archivo a otro archivo dentro del grupo, asegúrese de que el movimiento de los datos se lleve a cabo de forma correcta, se ha indicado que el archivo queda marcado para que ya no se utilice y pueda ser quitado de la base de datos por utilizar la sentencia ALTER DATABASE.

Comentarios


Es necesario notar que la reducción se hace más efectiva si se lleva a cabo después de una operación que crea mucho espacio y posteriormente lo deja inutilizado, como es el caso de una operación para truncar o eliminar tablas.  Si bien, la mayoría de las bases de datos requieren que haya espacio disponible para realizar las operaciones diarias de forma normal, el tratar de reducir una base de datos en forma reiterada y su tamaño vuelve a aumentar, no sirve tratar de reducir la base de datos de esta forma.
La reducción de los archivos no mantiene la fragmentación de los índices actuales de la base de datos y es muy posible que aumente la fragmentación hasta cierto punto, ésta es otra de las razones para no reducir la base de datos de forma continua.

Debe tenerse en cuenta que la reducción de varios archivos en la misma base de datos debe hacerse de forma secuencial en lugar de simultáneamente. La contención en las tablas del sistema puede provocar retrasos debido al bloqueo.
Como se ha indicado, es recomendable ejecutar la instrucción CHECKPOINT en la base de datos antes de utilizar el comando que reduzca el tamaño de los archivos para que las páginas modificadas que se encuentren en la memoria se almacenen adecuadamente en el disco y se mejore el desempeño del comando.

No hay comentarios.:

Publicar un comentario