domingo, 19 de agosto de 2012

Como visualizar a última query executada por cada conexão aberta

Essa surgiu no meu trabalho. Precisávamos entender o funcionamento de um web service simples para o qual não tínhamos o código-fonte disponível, então em um determinado momento foi necessário ver qual consulta ele estava fazendo no banco a partir de uma determinada solicitação. Novamente, antes de sairmos ligando o Profiler, consideramos que a regra de negócio do web service poderia ser simples e talvez pegando a última query executada por aquela conexão teríamos a resposta. Pois bem, deu certo.

Aí vai a query que resolveu o nosso problema:

SELECT session_idTEXT
FROM 
sys.dm_exec_connectionsCROSS APPLY sys.dm_exec_sql_text(most_recent_sql_handleAS ST

Aparece o session_id e o texto da query executada. Mas caso você queria mais informações para saber de qual máquina veio a query, o seu IP, qual software está fazendo a requisição e outras informações, sem problemas. É só fazem um INNER JOIN com a view de sistema sys.sysprocesses , que é a mesma utilizada pelas stored procedures sp_who e sp_who2, empregadas para visualizar as sessões e processos em aberto. Então aí vai uma versão mais completinha:

SELECT client_net_address as [IP do cliente],
p.hostname as [Nome da máquina do cliente],
[text] as [Texto da consulta],
DB_NAME(p.dbid) as [Nome do BD no qual foi executada a query],
p.[program_name] as [Programa solicitante]
FROM sys.dm_exec_connections c
INNER JOIN sys.sysprocesses p on c.session_id = p.spid
CROSS APPLY sys.dm_exec_sql_text(most_recent_sql_handle) AS ST

Espero que a dica seja útil! Caso vocês tenham quaisquer dúvidas sobre como resolver um problema no SQL Server, coloquem um comentário que tento responder - dentro da minha capacidade, é claro - o mais rápido possível.

6 comentários:

  1. Muitíssimo obrigado!
    Precisei para resgatar uma query que não tinha entendido bem e que foi executada em outra máquina e consegui o que queria!
    Perfeita query!
    Obrigado!

    ResponderExcluir
  2. Valeu por publicar isso, precisei e resolveu meu problema.

    ResponderExcluir
  3. sensacional, mto bom...me ajudou mto, obrigado

    ResponderExcluir
  4. Excelente, parabéns! Precisou de uns pequenos ajustes para o que eu queria, mas, como base, foi de enorme valor!

    ResponderExcluir