SQL Server – Como identificar e coletar informações de consultas demoradas utilizando Trace (SQL Server Profiler)

Visualizações: 1.656
Tempo de Leitura: 4 minutos

Olá pessoal!
Como vocês estão ?

Neste post eu vou demonstrar a vocês como identificar e coletar informações de consultas demoradas utilizando Trace (SQL Server Profiler). Isso é muito útil para lhe auxiliar em análises de performance tuning, facilitando a identificação de rotinas que estejam com tempo de resposta alto, tanto execução de procedures quanto queries ad-hoc.

No dia a dia, utilizo muito esse recurso para me ajudar a identificar timeouts em aplicações (Duração da query = tempo máximo de timeout configurado na app) e possíveis consultas candidatas a realizar um trabalho de performance tuning.

O fluxo dessa rotina funciona da seguinte forma:

  • Verifica se o trace já está ativo.
  • Caso o trace esteja ativo, desativa o trace e fecha o arquivo
  • Cria a tabela de histórico das consultas (caso não exista).
  • Lê os dados do arquivo de trace e insere na tabela de histórico
  • Ativa o recurso xp_cmdshell dinamicamente (caso não esteja ativado)
  • Apaga o arquivo de trace
  • Desativa o recurso xp_cmdshell dinamicamente (caso não estava ativado antes)
  • Cria novamente o trace
  • Ativa o trace recém criado

A ideia é que seja criado um Job que é executado a cada X minutos que execute todo esse processo, limpando o arquivo de trace e inserindo os dados coletados na tabela de histórico para que os DBA’s possam consultar os dados lidos do arquivo de trace.

Caso você queira conhecer uma solução que utilize Extended Events (XE) ao invés do Trace, que é uma tecnologia mais moderna e intuitiva, dê uma lida no meu artigo SQL Server – Como identificar e coletar informações de consultas demoradas utilizando Extended Events (XE).

Código-fonte da rotina de coleta

Resultado:

Na minha rotina, eu configurei para coletar qualquer query que execute por mais de 7 segundos. Fique à vontade para alterar e aplicar filtros conforme sua necessidade.

É isso aí, pessoal!
Um abraço e até a próxima.