DBCC STACKDUMP. Obtener ficheros de traza en SQL Server

GPS Open Source NewsHola a todos.
Hoy queremos compartir una de las dos formas que tenemos para conseguir ficheros de traza cuando tenemos errores en SQL Server, y al preguntar al soporte de Microsoft nos pide que se lo enviemos para su análisis. Estos ficheros de traza se pueden conseguir de dos formas: mediante la herramienta Sqldumper.exe y mediante el comando DBCC STACKDUMP.

Hoy hablaremos de DBCC STACKDUMP, pero en próximas entradas hablaremos de Sqldumper.exe. Si no te lo quieres perder, suscríbete a nuestra newsletter.

¿Cómo funciona DBCC STACKDUMP?

Este comando se ejecuta desde SQL Server Management Studio o un cliente como sqlcmd. Realiza un volcado de memoria en un fichero de traza, que se guarda en la ruta por defecto. Teniendo en cuenta que la prueba se realiza con SQL Server 2016 e instancia por defecto, en este caso ruta es:

<install_dir>\MSSQL13.MSSQLSERVER\MSSQL\Log

Los ficheros creados tienen como nombre SQLDump0001 para la primera ejecución, y aumenta el número en siguientes ejecuciones.

Establecer un trace flag

Para ejecutar el comando hay que establecer un trace flag para indicar qué datos de traza se quieren encontrar. Hay dos trace flags que se pueden utilizar:

  • Trace Flag 2544 – Generates full memory dump
  • Trace Flag 2551 – Generates filtered memory dump (Full Dump – Data/index Pages)

Para activar cualquiera de los dos flags hay que utilizar el comando DBCC TRACEON

¿Cómo utilizar DBCC STACKDUMP?

Una vez activado, se ejecuta el comando DBCC STACKDUMP y se genera el fichero de traza, en la ruta comentada anteriormente.

DBCC STACKDUMP

Hay que tener cuidado con la ejecución del comando en entornos productivos, ya que puede generar bloqueos y esperas en el sistema, y afectar al normal funcionamiento de la instancia.
Una vez generado el fichero de traza, es buena práctica desactivar el trace flag para evitar estos problemas de rendimiento. Para quitar el trace flag, se utiliza el comando DBCC TRACEOFF.

DBCC TRACEOFF

Para saber el nivel de Trace Flag que está activado, se puede utilizar el comando DBCC TRACESTATUS.
Este comando devuelve el nivel de Trace flag activado:

1> DBCC TRACESTATUS(-1)
2> go
TraceFlag Status Global Session
--------- ------ ------ -------
     2551      1      1       0

(1 filas afectadas)
Ejecución de DBCC completada. Si hay mensajes de error, consulte al administrador del sistema.

Si no hubiera ningún Trace flag activado, el comando no devuelve error, simplemente termina la ejecución sin mostrar nada.

1> DBCC TRACESTATUS(-1)
2> go
Ejecución de DBCC completada. Si hay mensajes de error, consulte al administrador del sistema.

Existe documentación oficial de Microsoft, tanto para el comando DBCC STACKDUMP como cada uno de los Trace Flags. Os dejamos los enlaces a los mismos:

Documentación del comando DBCC STACKDUMP:
https://support.microsoft.com/en-us/help/917825/use-the-sqldumper-exe-utility-to-generate-a-dump-file-in-sql-server

Documentación del Trace flag 2551 en el siguiente link:
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/caaaf57e-21e0-45b3-b501-125c51b6ecba/trace-flag-2551?forum=sqldatabaseengine

La interpretación del fichero de traza se realiza por parte del soporte de Microsoft.

Esperamos que os sea de utilidad. Nos vemos en próximas entradas.

Un saludo,

Equipo de Base de datos