我创建了一个扩展事件来将所有成功登录记录到我的产品服务器中。正如您猜到的那样,一秒钟内有数百个连接出现,所以我只需要根据它是否是缓存连接来过滤其中的一些连接。我无法在登录事件的 is_cached 属性上创建过滤器。我已经通过 [sqlserver].[client_app_name] 属性进行了过滤。当我观看实时数据时,顺便说一句,我可以根据 is_cached 属性进行过滤。
这是事件的脚本:
CREATE EVENT SESSION deneme ON SERVER
ADD EVENT sqlserver.login( ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.username)
WHERE ([sqlserver].[client_app_name]<>N'Microsoft SQL Server Management Studio - Transact-SQL IntelliSense')
ADD TARGET package0.event_file(SET filename=N'D:\_VTY\LastLoginAudits\audit_logon.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)
我尝试像这样在 where 子句中添加一个谓词,但它没有用:
WHERE ([sqlserver].[client_app_name]<>N'Microsoft SQL Server Management Studio - Transact-SQL IntelliSense')
AND [sqlserver].[is_dac]<>N'True')
提前致谢。
您只需要指定 is_cached,而不用“sqlserver”作为前缀: