Hey Guys!
Como vocês estão?
No post de hoje, vou mostrar pra vocês como retornar as sessões ativas do SQL Server, mostrando uso de CPU, quantidade de leituras e escritas, qual o usuário está realizando a consulta, o que está sendo executado por esta sessão, qual o software utilizado, qual o hostname e mais várias outras informações sobre a sessão e a consulta. Para quem já conhece a sp_WhoIsActive (Se você não conhece, saiba mais acessando este post), vai reparar que elas possuem um retorno bem parecido, e esse foi o intuito da query mesmo.
Por diversas vezes, já tive problemas de lentidão ao executar a sp_WhoIsActive em ambientes com alto processamento e contenção de disco e/ou TempDB, fazendo com que o retorno da SP demorasse vários segundos, até mesmo alguns minutos, uma vez que essa SP tem muita utilização de TempDB para retornar os resultados da forma que ela retorna atualmente.
Com o objetivo de prover uma solução parecida, mas que fosse mais leve e não utilizasse a TempDB, permitindo que ela seja executada rapidamente mesmo em cenários como o citado acima, eu e o Tiago Neves criamos essa versão mais “enxuta”, retornado as principais informações e sem utilizar os diversos parâmetros que a SP original nos fornece.
Qual a diferença para a sp_WhoIsActive?
- Não utiliza a TempDB
- Execução mais rápida
- Código mais simples de entender
- Pode ser facilmente utilizada como view, table-valued function ou scalar function, permitindo utilizar order by, select into, where, etc.
- Além de mostrar a query em execução, mostra também o Outer Command (a sp_WhoIsActive também mostra se utilizado o parâmetro @get_outer_command = 1)
- Caso a sessão seja de um job, mostra o nome do job na coluna program_name
- Retorna o XML do plano de execução (a sp_WhoIsActive também mostra se utilizado o parâmetro @get_plans = 1)
Código-fonte da “sp_Tiny_WhoIsActive”
Com o código-fonte abaixo, você pode retornar as informações das sessões em execução com apenas 1 SELECT, podendo até criar uma view para facilitar as consultas futuras.
Visualizar código-fonte (Versão completa - SQL Server 2012+)Caso você queira uma versão ainda mais leve e mais rápida, eu retirei alguns recursos (Como exibição do XML do plano de execução, contagem de sessões em lock, etc) e disponibilizei o código abaixo:
Visualizar código-fonte (Versão mais rápida e com alguns recursos a menos)Como vocês podem ter observado, eu utilizo a função FORMAT, disponível a partir do SQL Server 2012. Caso você esteja numa versão anterior, a execução do código abaixo vai gerar um erro para você. Basta remover essa função para conseguir utilizar a query normalmente (Os números só não terão os separadores de milhar, mas isso é até bom para fazer ordenação), ou utilizar a versão abaixo:
Visualizar código-fonte (SQL Server 2008 e anterior)Resultado da execução da query
And that's it, folks!
Caso vocês tenham sugestões ou melhorias, fiquem à vontade para me avisar nos comentários ou enviar sua alteração no link https://github.com/dirceuresende/tiny-sp_whoisactive.
Espero que tenham gostado, um abraço e até a próxima!
sql server lightweight tiny sp_whoisactive identificar sessão query executando mais leve sem consumir tempdb low consumption
sql server lightweight tiny sp_whoisactive identificar sessão query executando mais leve sem consumir tempdb low consumption
Achei ótimo essas consultas, porém estou com um probem, quando identifico alguns bloqueios, e tenho o session_id, preciso de uma consulta que me permita informar para os desenvolvedores, qual a query que causou o bloqueio, depois de ter saido da consulta?
Obrigado. Não usei a sua consulta, mas ela me ajudou a modificar a que tenho para trazer transações abertas, mas que não estão executando nada.
Top..parabéns!!
Nota 10 Dirceu. Muito obrigado!