Todos nós já aprendemos no artigo anterior como utilizar a sysprocesses a nosso favor e identificar diversos problemas no SQL Server.
Neste novo artigo, vou demonstrar como você identificar o que cada processo está executando.
Para darmos continuidade, certifique-se de ter lido o seguinte artigo:
http://www.mcdbabrasil.com.br/modules.php?name=News&file=article&sid=358
Sempre que identificamos um ou mais processos consumindo recursos ou apresentando problemas, nos perguntamos o que este processo está fazendo ?
Pois bem no SQL Server 2000, existem duas maneiras de se identificar o que está acontecendo.
A primeira delas é utilizando o comando DBCC INPUTBUFFER(spid), onde spid=(Núm. do processo identificado após realizar uma query na sysprocesses)
Porém este comando é limitado e demonstra apenas os primeiros 255 caracteres.
Quando precisamos de algo mais detalhado, devemos recorrer a outro comando não muito publicado no SQL Server, porém de grande valia.
É a função ::fn_get_sql, esta função só foi divulgada no BOL a partir do SP3.
Segue uma demonstração de como utilizá-la:
DECLARE @handle binary(20)
SELECT @handle = sql_handle FROM master..sysprocesses WHERE spid = 220 (Spid de exemplo)
SELECT [text] FROM ::fn_get_sql(@handle)
Assim que executamos esse código nos retorna o texto do handle da query que está em execução.
Atenção: O retorno do texto de cada handle, só acontece quando existem processos de usuário ou internos que se caracterizem como SQL Statement.
Esse foi mais um artigo, espero que seja útil a todos e até a próxima.
PS: Para saber mais sobre a função fn_get_sql, veja também o artigo Monitorando conexões bloqueadas aqui mesmo no portal.
Abraços,
Rodrigo Fernandes

