Comando DBCC UPDATEUSAGE
Como se ha mencionado, cuando hablamos de los Comandos DBCC , que este comento pertenece al grupo de mantenimiento y nos informa sobre las imprecisiones de recuento de filas y páginas de las vistas de catálogo y en caso necesario las corrige. Las imprecisiones pueden causar la devolución de informes incorrectos sobre uso de espacio por parte del procedimiento almacenado del sistema sp_spaceused.
Microsoft SQL Server
ha indicado que el Comando
DBCC CHECKDB se ha mejorado para detectar si los recuentos de páginas o
filas devuelven valores negativos. En caso de que esta situación se presente,
la salida del comando DBCC CHECKDB contiene una advertencia y una recomendación
para que se ejecute el comando DBCC UPDATEUSAGE con el fin de solucionar el
problema.
La sintaxis
de este comando en su forma más simple es:USE master;
GO
GO
DBCC
UPDATEUSAGE(database_name);
Con este
comando, se lleva a cabo la tarea de actualizar las imprecisiones en la base de
datos denominada database_name que es el nombre de la base de datos que se
desea actualizar. Es importante indicar
que aunque se puede indicar el identificador de base de datos (database_id),
éste es un número que está asociado al nombre de la base de datos, por lo que
es más común el uso del nombre de la base de datos. Los nombres de base de datos deben cumplir
las reglas de identificadores.
No podemos
decir de una sintaxis que se use más a menudo, dado que con este comando, se
puede indicar, ya sea una tabla o vista específica, o bien puede ser indicado únicamente
un índice, de esta forma podemos escribir el comando de la siguiente forma;
para el caso de querer indicar una tabla o vista se usará:
USE master;
GO
GO
DBCC UPDATEUSAGE (database_name,
table_name);
Que lleva a
cabo la tarea de actualizar las imprecisiones 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, como se ha establecido, 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.
Ahora bien, como se indicó anteriormente, se puede optar por indicar un índice,
por lo que el comando se usara como:USE master;
GO
GO
DBCC UPDATEUSAGE (database_name,
table_name, index_name);
En este
caso se ejecutara la tarea en el índice indicado como index_name, de la tabla table_name
perteneciente a la base de datos database_name, como se ha indicado en los
otros niveles, es posible que se indique el número de identificación del índice
(index_id), pero es más común el uso de los nombres, nuevamente indicaremos que
deben cumplir con las reglas aplicables para los identificadores.Existen algunos
argumentos opcionales que pueden ser utilizados con el comando, estos son:
WITH NO_INFOMSGS
|
Suprime todos los mensajes
de información.
|
COUNT_ROWS
|
Especifica que la columna
row count se actualiza con el recuento actual del número de filas de la tabla
o la vista.
|
Ejemplos de DBCC UPDATEUSAGE
Mostraré algunos ejemplos de uso de este comando:USE db1;
GO
GO
DBCC UPDATEUSAGE (0) WITH NO_INFOMSGS;
En este
ejemplo, se ésta indicando que se lleve a cabo la actualización del recuento de
filas o páginas de la base de datos actual, sin emitir mensajes informativos. Hay
que recordar que en muchos de los comandos, cuando se establece 0 en la identificación
de la base de datos se hace referencia a la base de datos actual. En caso de
que no sea la base de datos la que se desee, utilice la instrucción USE, antes
para seleccionar la base de datos.USE master;
GO
DBCC
UPDATEUSAGE (db1);
En este
ejemplo, se generara la tarea para la actualización en la base de datos
denominada Db1. USE master;
GO
GO
DBCC UPDATEUSAGE (Db1, [dbo.tb1]);
En este
ejemplo, se generara la tarea para la actualización en la tabla dbo.tb1 de la base
de datos denominada Db1. USE master;
GO
GO
DBCC UPDATEUSAGE (Db1, [dbo.tb1],
IX_tb1_clm1);
En este
ejemplo, se generara la tarea para la actualización en el índice IX_tb1_clm1 de
la tabla dbo.tb1 de la base de datos denominada Db1. USE master;
GO
GO
DBCC UPDATEUSAGE (Db1, [dbo.tb1],
IX_tb1_clm1) WITH COUNT_ROWS;
En este
ejemplo, se generara la tarea para la actualización en el índice IX_tb1_clm1 de
la tabla dbo.tb1 de la base de datos denominada Db1, actualizando el número de
renglones de la tabla. Comentarios
Como se ha
mencionado, este comando debe utilizarse como una recomendación del comando
DBCC CHECKDB, por ello se recomienda que se evite la ejecución del comando de
forma rutinaria. Dado que la ejecución puede tardar algún tiempo en ejecutarse
con tablas o bases de datos grandes, por ello no se debería utilizar a menos
que sospeche que el procedimiento sp_spaceused está devolviendo
valores incorrectos, o que sea sugerido.
Hay que considerar
que la ejecución de este comando de forma habitual, por ejemplo cada semana, debe
llevarse a cabo solo si la base de datos sufre con frecuencia modificaciones
asociadas al uso del Lenguaje de definición de datos (DDL), por ejemplo, con
las instrucciones CREATE, ALTER o DROP. Esta situación es común en un ambiente
de desarrollo, sin embargo, en los nuevos ambientes denominados DevOps, puede
llegar a presentarse con más frecuencia.
No hay comentarios.:
Publicar un comentario