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.