在 SQL 2016 上使用扩展事件 - 我们如何捕获用户针对特定数据库运行的所有查询。这有助于我们了解哪些开发人员/报告分析师/etl 开发人员正在对生产实例运行查询。
预期结果:用户名、TSQL 查询运行、完成时间
小智 5
您将要使用该sqlserver.sql_statement_completed
事件,statement
默认情况下该事件包括操作字段。此外,添加package0.collect_system_time
操作,有多个选项可用于捕获用户名。
本示例用于sqlserver.session_nt_username
获取当前会话 NT 用户。它将结果输出到一个文件中,您可能需要根据环境的需要调整一些选项。
CREATE EVENT SESSION [XE_QUERY_CAPTURE] ON SERVER
ADD EVENT sqlserver.sql_statement_completed (
SET collect_statement=(1)
ACTION(package0.collect_system_time,sqlserver.session_nt_username)
)
ADD TARGET package0.event_file(SET filename=N'C:\Test\XE_QUERY_CAPTURE.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
);
GO
ALTER EVENT SESSION [XE_QUERY_CAPTURE] ON SERVER
STATE = START;
Run Code Online (Sandbox Code Playgroud)