jueves, 19 de octubre de 2017

SQL Server DBCC CLEANTABLE

Comando DBCC CLEANTABLE

Ya he mencionado los Comandos DBCC de validación, iniciaré ahora con los comandos del grupo de mantenimiento, e iniciaré recordando, que este comando recupera el espacio de las columnas de longitud variable quitadas en tablas o vistas indexadas. Hay que recordar que una columna de longitud variable puede tener uno de los siguientes tipos de datos: varchar, nvarchar, varchar (max), nvarchar (max), varbinary, varbinary (max), texto, ntext, imagen, sql_variant, y xml. No indicaré las diferencias entre cada uno de los tipos de datos indicados, eso lo haremos en alguna otra ocasión.

La sintaxis de este comando en su forma más simple es:

DBCC CLEANTABLE (database_name, [table_name]);
Que lleva a cabo la recuperación de espacio en la tabla denominada table_name de base de datos denominada database_name. Los nombres de base de datos y de tablas deben seguir las reglas para los identificadores. Es posible que se utilice el número de identificación de la base de datos (database_id) o de la tabla (table_id) o de una vista (view_id) si se prefiere.

Es importante indicar, que si bien muchos comandos DBCC registran actividad en el Log de Microsoft SQL Server, este  comando no genera una entrada ya que no afecta el funcionamiento de la base de datos.
La sintaxis que se usa más a menudo es:

USE database_name;
GO
DBCC CLEANTABLE (0, [table_name])
Lo anterior indica que se lleve a cabo la recuperación de espacio de la tabla denominada table_name en la base de datos indicada a través del comando USE. 

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

batch_size
Es el número de filas procesadas por transacción. Si no se especifica, o si su valor es 0, la instrucción procesa toda la tabla en una transacción.
WITH NO_INFOMSGS
Suprime todos los mensajes de información.


Es importante indicar en este punto que el si no se especifica batch_size, entonces el comando procesa toda la tabla en una transacción y la tabla se bloquea en modo exclusivo durante la operación. Para algunas tablas grandes, la longitud de una transacción y el espacio de registro necesario puede ser muy grande. Si se especifica un tamaño de proceso por lotes, el comando se ejecuta en una serie de transacciones; cada una de ellas incluye el número de filas especificado.

Ejemplos de DBCC CLEANTABLE


Mostraré algunos ejemplos de uso de este comando:

DBCC CLEANTABLE (db1,'Sche1.Table1', 0) WITH NO_INFOMSGS;
El comando anterior lleva cabo la recuperación de espacio en la base de datos db1 para la tabla Sche1.Table1 en una sola transacción sin emitir mensajes, solo el mensaje de terminación del comando.

DBCC CLEANTABLE (db1,'Sche1.Table1', 100) WITH NO_INFOMSGS;

El comando anterior lleva a cabo la recuperación de espacio, como el ejemplo anterior, pero ahora lo hará en lotes de 100 renglones.

Comentarios


Este comando no debe ejecutarse como una tarea de mantenimiento rutinaria. En lugar de ello, debe utilizarse después de realizar cambios significativos en columnas de longitud variable de una tabla o vista indizada, y hay que recuperar inmediatamente el espacio sin utilizar. Como alternativa, puede volver a generar los índices en la tabla o vista; no obstante, esta operación consume mas recursos.
DBCC CLEANTABLE no se puede ejecutar como una transacción dentro de otra transacción. Esta operación se registra por completo. DBCC CLEANTABLE no se admite para su uso en tablas del sistema, tablas temporales o la parte de índice de almacén de columnas optimizado en memoria xVelocity de una tabla.

No hay comentarios.:

Publicar un comentario