Usando extend event para verificar quantas vezes uma query executou no banco.

     Olá pessoal, espero que estejam todos bem!

    

    Hoje vim trazer para vocês uma maneira de contar quantas vezes uma determinada query foi executada no SQL-SERVER. 

 Vamos utilizar o extend event para fazer essa contagem. 


 Primeiro passo é descobrir qual é o queryhash dessa query, queryhash é o identificador da query, podemos pegar esse queryhash recuperando o plano de execução ou via DMV, irei demonstrar pegando pelo plano de execução:




Agora que pegamos o queryhash, que nesse caso é "0xBA334941B40ABB82", precisamos converter ele para bigint, pois o tipo de dados do extend event é diferente do tipo de dados do plano de execução.




Agora vamos pegar esse número e construir um  extend event com os eventos abaixo:

  • sp_statement_completed
  • sql_batch_completed
  • sql_statement_completed

Para facilitar a vida de todos, eu vou deixar o script criado e vocês só precisam trocar  os campos em vermelhos, os 3 primeiros marcados é o queryhash convertido para query_hash_signed e o último é o caminho do extend event:


Agora vou executar a query 5 vezes:




Posso agregar por query_hash_signed e ter um count:



abaixo tenho a quantidade de execuções:



Vou colocar o código aqui, vai que o GIT... shushsus


Obs: Existem outros métodos, como por exemplo utilizar o query store :)


É isso pessoal, espero que tenham gostado, até a próxima!


CREATE EVENT SESSION [qtd_exec_query] ON SERVER 

ADD EVENT sqlserver.sp_statement_completed(SET collect_statement=(1)

    ACTION(sqlserver.query_hash,sqlserver.query_hash_signed,sqlserver.query_plan_hash,sqlserver.query_plan_hash_signed,sqlserver.sql_text)

    WHERE ([package0].[equal_int64]([sqlserver].[query_hash_signed],(-5029595812300407934.)))),

ADD EVENT sqlserver.sql_batch_completed(

    ACTION(sqlserver.query_hash,sqlserver.query_hash_signed,sqlserver.query_plan_hash,sqlserver.query_plan_hash_signed)

    WHERE ([package0].[equal_int64]([sqlserver].[query_hash_signed],(-5029595812300407934.)))),

ADD EVENT sqlserver.sql_statement_completed(SET collect_statement=(1)

    ACTION(sqlserver.query_hash,sqlserver.query_hash_signed,sqlserver.query_plan_hash,sqlserver.query_plan_hash_signed)

    WHERE ([package0].[equal_int64]([sqlserver].[query_hash_signed],(-5029595812300407934.))))

ADD TARGET package0.event_file(SET filename=N'C:\temp\query_qtd.xel')

WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS

,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)


Comentários

Postagens mais visitadas deste blog

Tuning no Postgres utlizando View Materializada

Como realizei um tuning que caiu o tempo de execução de 8h para 7minutos!

Window Functions: Row_number()