Eu tenho uma sessão de evento estendida configurada para rastrear eventos de atenção, para monitorar procedimentos que expiraram. Este é o script de criação:
CREATE EVENT SESSION [ApplicationTimeout3] ON SERVER
ADD EVENT sqlserver.attention(
ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.database_name,sqlserver.session_id,sqlserver.sql_text,sqlserver.tsql_frame,sqlserver.tsql_stack,sqlserver.username)
WHERE ([package0].[equal_boolean]([sqlserver].[is_system],(0))))
ADD TARGET package0.event_file(SET filename=N'D:\ExtendedEvents\ApplicationTimeout3.xel',max_file_size=(100),max_rollover_files=(5))
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=ON)
GO
O problema é que nos tempos limite que recebo, NÃO recebo o sql_text. (Nem recebo tsql_frame ou tsql_stack). Não é retornado quando faço o "Assistir dados ao vivo".
Eu vejo os tempos limite, eles ocorrem ao mesmo tempo que os que vejo quando faço consultas em sys.query_store_runtime_stats (com execução_type_desc = 'Abortado'). No entanto, recebo de volta um conjunto limitado de campos e não são deles que preciso.
Além disso, há muitos MAIS eventos registrados por meio do Evento Estendido do que vejo quando consulto sys.query_store_runtime_stats. Não tenho ideia do que são.
Alguma pista de como eu poderia realmente obter o sql que está sendo executado? Posso obter o nome do procedimento armazenado consultando as tabelas do armazenamento de consultas. O que eu gostaria de obter são os parâmetros com os quais o procedimento armazenado é chamado.
Se você deseja rastrear o tempo limite da consulta, achei este evento estendido mais útil:
Você o descreveu aqui:
https://adbsql.blogspot.com/2019/11/tracking-query-timeouts-with-extended.html
Nota: essa é minha própria postagem no blog.
Usei-o há alguns anos, então não tenho 100% de certeza, mas acho que você deveria obter as consultas com parâmetros de tempo de execução. Também tive problemas com o evento de atenção conforme você descreve. Parecia produzir entradas falsas. É por isso que mudei para rpc_completed e sql_batch_completed.