我正在尝试构建一个 XE,以找出我们的哪些内部应用程序(没有应用程序名称,因此显示为 .Net SQLClient 数据提供程序)正在访问特定服务器。理想情况下,我想获得 Client 和 Database 的名称,但不确定我是否可以在一个 XE 中做到这一点。
我认为为了易于使用,我会使用 histogram/asynchronous_bucketizer,并保存尝试命中的内容和频率的计数。但是,我似乎无法让它在 2012 年工作,更不用说 2008 年了。如果我使用 sqlserver.existing_connection 它可以工作,但只会在连接时给我计数。我想在白天得到计数,看看它从每台服务器发生的频率,所以我尝试了 preconnect_completed。这是正确的事件吗?
此外,我使用 XE 的部分原因是这些服务器每分钟可以接到数千个调用。
到目前为止,这是我想出的,它有效,但只为我提供匹配的当前 SSMS 连接 - 显然,我会将其更改为 .Net SQLClient 数据提供程序。
CREATE EVENT SESSION UnknownAppHosts
ON SERVER
ADD EVENT sqlserver.existing_connection(
ACTION(sqlserver.client_hostname)
WHERE ([sqlserver].[client_app_name] LIKE 'Microsoft SQL Server Management%')
)
ADD TARGET package0.histogram
( SET slots = 50,
filtering_event_name='sqlserver.existing_connection',
source_type=1,
source='sqlserver.client_hostname'
)
WITH(MAX_DISPATCH_LATENCY =1SECONDS);
GO