viernes, 3 de noviembre de 2017

SQL Server DBCC UPDATEUSAGE

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