我设置了一个扩展事件会话来跟踪注意力事件,以监视超时的过程。这是创建脚本:
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
问题是,在我得到的超时中,我没有得到 sql_text。(我也没有得到 tsql_frame 或 tsql_stack)。当我执行“观看实时数据”时,它不会返回。
我确实看到了超时,它们与我在查询 sys.query_store_runtime_stats 时看到的超时同时发生(execution_type_desc = 'Aborted')。但是,我返回的字段集有限,但它们不是我需要的字段。
另外顺便说一下,通过扩展事件记录的事件比我查询 sys.query_store_runtime_stats 时看到的要多。我不知道它们是什么。
关于如何实际获取正在执行的 sql 的任何线索?我可以通过查询查询存储表来获取存储过程名称。我想获得的是调用存储过程所使用的参数。