jueves, 9 de noviembre de 2017

SQL Server DBCC TRACEON / TRACEOFF

Comandos DBCC TRACEON / TRACEOFF y las marcas de seguimiento

Ya he indicado, cuando se inició con los Comandos DBCC, sobre los comandos varios o misceláneos, en esta ocasión hablare de dos comandos, el primero que habilita las marcas de seguimiento especificadas. Y el segundo que deshabilita las marcas de seguimiento especificados con el primer comando. Sin embargo es necesario mencionar que son las marcas de seguimiento y como pueden ayudarnos.

Se puede indicar que las marcas de seguimiento son utilizadas para establecer algunas características en el servidor de forma temporal, las que se habilitan o deshabilitan con los comandos que hemos indicado. Es importante mencionar que algunas marcas de seguimiento fueron introducidas para versiones específicas de Microsoft SQL Server, por lo que se hace necesario consultar el artículo asociado en Microsoft Support.
Actualmente se cuenta con 96 marcas de seguimiento, las cuales se clasifican en tres tipos de ámbito, global, sesión y consulta. Las 96 se utilizan en el ámbito global, esto es, se establecen en el nivel de servidor y se mantienen visibles para todas las conexiones en el servidor.  En el ámbito de sesión, se encuentran 45 de las 96 definidas, esto significa que las marcas de seguimiento se activarán únicamente para ser usadas en la conexión que las establece no están visibles para las demás conexiones, como es el caso de las globales. Cuando se habilita una marca de seguimiento en el ámbito de sesión, si se cierra la conexión, se desactiva la marca de seguimiento, dado que solo se habilito en esa conexión. Finalmente, las marcas de seguimiento de ámbito de consulta, son aquellas que solo se habilitan en el contexto de ejecución de la consulta, para ello se utiliza la opción QUERYTRACEON de la instrucción SELECT.

No indicaré cada una de las marcas de seguimiento que actualmente se manejan el Microsoft SQL Server, toda la información relacionada con las marcas de seguimiento se encuentra en los libros en linea de Microsoft SQL Server.
Es importante mencionar que deben tenerse en cuenta las siguientes reglas para su aplicación:
  •        Una marca de seguimiento de ámbito global debe habilitarse a nivel global, ya que en caso contrario no surtirá efecto. Es recomendable que se utilice la opción –T en la línea de comando de inicio de servicios de Microsoft SQL Server, lo cual garantizará que la marca permanezca activa después del reinició del servidor.
  •        Una marca de seguimiento que puede ser usada en cualquiera de los ámbitos mencionados, puede ser habilitada en el ámbito adecuado, teniendo en cuenta que una marca de seguimiento habilitada en el nivel de sesión nunca afectara otra sesión y el efecto se perderá cuando el SPID que inicio la marca de seguimiento sea cerrado.
Como puede deducirse, la habilitación de las marcas de seguimiento se habilitan o deshabilitan con los comandos DBCC TRACEON y DBCC TRACEOFF, que se analizan más adelante. Como se ha mencionado anteriormente, también es posible utilizar la opción –T en la línea de comando de inicio de servicios, recordando que esta opción habilita a nivel global, no será posible habilitar una marca de seguimiento a nivel sesión con la opción –T en el inició de los servicios. Para el nivel de consulta debe utilizarse la opción QUERYTRACEON en la instrucción SELECT. Es posible validar que marcas de seguimiento se encuentran activas utilizando el comando DBCC TRACESTATUS.
No es mi intención analizar la instrucción SELECT y sus opciones, solo mencionare un ejemplo del uso de la opción QUERYTRACEON, para que se observe como se lleva a cabo. Solo por mencionar un par de marcas de seguimiento que se encuentran en el grupo de las que pueden utilizarse a nivel de consulta, sugiero que se revise bien la documentación correspondiente a las marcas de seguimiento.

Marca de Seguimiento
Descripción
4137
Permite que Microsoft SQL Server genere un plan usando mínima selectividad cuando estima predicados AND para filtrar teniendo en cuenta la correlación, en el modelo de estimación de cardinalidad del optimizador de consultas de Microsoft SQL Server 2012 y versiones anteriores.
4199
Habilita al optimizador de consultas (QO) los cambios publicados en Microsoft SQL Server actualizaciones acumulativas y Service Packs.

Teniendo esto en cuenta, podemos llevar a cabo la consulta utilizando estas marcas de seguimiento de la siguiente manera:
SELECT x
  FROM correlated
 WHERE f1 = 0 AND f2 = 1 OPTION (QUERYTRACEON 4199, QUERYTRACEON 4137)

En esta instrucción se lleva cabo la consulta a la tabla identificada como correlated con la opción el uso de las marcas de seguimiento identificadas como 4199 y 4137. Por lo que esta consulta puede habilitar todas las revisiones que afectan al plan controladas por marcas de seguimiento indicadas para la consulta.

DBCC TRACEON


Como se ha indicado este comando habilita las marcas de seguimiento que se especifican. Tratándose de un servidor de producción, es recomendable habilita las marcas se seguimiento en todo el servidor para evitar un comportamiento impredecible, las cuales pueden habilitarse, utilizando la opción –T en la línea de comandos de Microsoft SQL Server, o utilizando el comando DBCC TRACEON.
Si bien las marcas de seguimiento son utilizadas para personalizar algunas características que controlen el funcionamiento de Microsoft SQL Server, las marcas de seguimiento habilitadas permanecerán hasta que sean deshabilitadas.

La sintaxis que puede utilizarse para habilitar una marca a nivel global es:

DBCC TRACEON (trace_num, -1);
En este caso se observa que se habilitara la marca de seguimiento trace_num a nivel global, indicado con el argumento -1,
La sintaxis que puede utilizarse para habilitar una marca a nivel de sesión es:

DBCC TRACEON (trace_num);
Ahora se observa que se habilitara la marca de seguimiento trace_num a nivel de sesión, la ausencia del argumento -1, indica que es a nivel sesión. 

Existen un argumento opcional que pueden ser utilizado con el comando, éste es:

WITH NO_INFOMSGS
Suprime todos los mensajes informativos.

Es preciso indicar que pueden indicarse más de un número asociado con la marca de seguimiento en el comando de tal forma que solo necesita separarse por comas.

Ejemplos de DBCC TRACEON


Mostraré algunos ejemplos de uso de este comando:

DBCC TRACEON (3205);
En este ejemplo, se habilitara la marca de seguimiento identificada como 3205, que permite deshabilitar la compresión de hardware para los controladores de cinta, esta acción se lleva  cabo a nivel de sesión.

DBCC TRACEON (3205, -1);
En el ejemplo, se habilita la marca de seguimiento 3205, ahora a nivel global.

DBCC TRACEON (3205, 260, -1) WITH NO_INFOMSGS;
En este ejemplo, se habilitan las marcas 3205, para deshabilitar la compresión de hardware para controladores de cinta y la marca 260, que imprime información de versión sobre las bibliotecas de vínculos dinámicos (DLL) de procedimientos almacenados extendidos, de forma global.

DBCC TRACEOFF


Como se mencionó anteriormente, este comando deshabilita  las marcas de seguimiento que se indiquen, previamente habilitadas.
La sintaxis que puede utilizarse para deshabilitar una marca a nivel global es:

DBCC TRACEOFF (trace_num, -1);
En este caso se observa que se deshabilitará la marca de seguimiento trace_num a nivel global, indicado con el argumento -1,

La sintaxis que puede utilizarse para deshabilitar una marca a nivel de sesión es:

DBCC TRACEOFF (trace_num);
Aquí se observa que se deshabilitará la marca de seguimiento trace_num a nivel de sesión, la ausencia del argumento -1, indica que es a nivel sesión. La sintaxis e información completa de este comando se encuentran en los libros en línea de Microsoft SQL Server.

Existen un argumento opcional que pueden ser utilizado con el comando, éste es:

WITH NO_INFOMSGS
Suprime todos los mensajes informativos.

Como en el caso del comando DBCC TRACEON, pueden indicarse mas de un número asociado con la marca de seguimiento en el comando de tal forma que solo necesita separarse por comas.

Ejemplos de DBCC TRACEOFF

Mostraré algunos ejemplos de uso de este comando:

DBCC TRACEOFF (3205);
Se deshabilitará la marca de seguimiento identificada con el número 3205.

DBCC TRACEOFF (3205, -1) WITH NO_INFOMSGS;
En el ejemplo, se deshabilita la marca de seguimiento identificada con el número 3205, habilitada previamente a nivel global, sin emitir mensajes informativos.

Comentarios.


Las marcas de seguimiento son una de las herramientas que se tienen para el diagnóstico de problemas de rendimiento, la depuración de procedimientos almacenados o la determinación de problemas de sistemas complejos. Hay que revisar cada una de las características específicas de operación de las marcas de seguimiento para poder determinar cuál de ellas es la que puede ser utilizada con una versión especifica de Microsoft SQL Server y el propósito de diagnóstico requerido en su utilización.
Recuérdese que el uso del comando DBCC TRACEON para establecer una marca de seguimiento a nivel global solo permanecerá activa, mientras no se utilice el comando DBCC TRACEOFF para deshabilitarla o el servicio de Microsoft SQL Server no sea reiniciado, ya que una vez que se ha reiniciado la marca de seguimiento no se habilitara, si se desea que la marca de seguimiento se mantenga en operación debe utilizarse la opción –T en la línea de comando de inicio de servicios de Microsoft SQL Server.

Microsoft ha indicado que es posible que en futuras versiones de Microsoft SQL Server no se admita el comportamiento de algunas de las marcas de seguimiento, por lo que hay que validar el uso de alguna de las marcas de seguimiento actuales en versiones posteriores.

No hay comentarios.:

Publicar un comentario