どの内部アプリ (アプリ名がないため、.Net SQLClient データ プロバイダーとして表示される) が特定のサーバーにヒットしているかを調べるために、XE を構築しようとしています。理想的には、 Client と Database の名前を取得したいのですが、1 つの XE でそれを実行できるかどうかはわかりません。
使いやすさを考慮して、ヒストグラム/非同期バケタイザーを使用し、ヒットしようとしているものとその頻度のカウントを保存します。ただし、2008年よりもはるかに少ない2012年には機能しないようです。sqlserver.existing_connectionを使用すると機能しますが、接続時にのみカウントされます。日中にカウントを取得し、各サーバーから発生する頻度を確認したいので、preconnect_completed を試しました。これは正しいイベントですか?
また、私が XE を使用している理由の 1 つは、それらのサーバーが 1 分間に数千の呼び出しを受信できることです。
これは私がこれまでに思いついたことです。これは機能しますが、一致する現在の SSMS 接続しか提供しません。明らかに、それを .Net SQLClient Data Provider に変更します。
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