web-dev-qa-db-ja.com

ApplicationName(sqlserver.client_app_name)を取得してxeventに表示する

SQLプロファイラーで使用していたような拡張イベントを使用して、いくつかのT-SQLを調べようとしています。次のイベントセッションがあります。

IF EXISTS (SELECT name FROM sys.dm_xe_sessions WHERE Name = 'PySoup tracing')
BEGIN
    DROP EVENT SESSION [PySoup tracing] ON SERVER
END

CREATE EVENT SESSION [PySoup tracing] ON SERVER 
ADD EVENT sqlserver.rpc_completed (ACTION(sqlserver.client_app_name, sqlserver.sql_text )),
ADD EVENT sqlserver.sp_statement_completed (ACTION(sqlserver.client_app_name, sqlserver.sql_text )),
ADD EVENT sqlserver.sql_batch_completed (ACTION(sqlserver.client_app_name, sqlserver.sql_text )),
ADD EVENT sqlserver.sql_statement_completed (ACTION(sqlserver.client_app_name, sqlserver.sql_text ))
ADD TARGET package0.event_file(SET filename=N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\PySoup tracing.xel')--,
--ADD TARGET package0.ring_buffer(SET max_events_limit=(1000000))
GO

ALTER EVENT SESSION [PySoup tracing] ON SERVER
    STATE = START;

ACTION句は、イベントによって返された列をリストすることになっていると思いました。ただし、GUIでイベントデータを表示すると、sqlserver.client_app_name列が表示されません。

xevent screengrab

何が悪いのですか?

5
Justin Dearing

私は以前にこの問題を見たことがありますが、このタイプのシーケンスがあるとどうなりますか?

  1. セッションを作成する
  2. セッションを開始
  3. セッションを停止
  4. 列データ(アクションまたはフィールド)を追加する
  5. セッションを開始

GUIは追加された列データを表示しません。ここでのオプションは、ターゲットを直接クエリするか、古いセッション定義のXELファイルをクリア/名前変更することです。

8
Thomas Stringer

あなたがすでにそれをマークしたので、これはあなたの状況で答えとみなされるというわけではありません。これは、少し試してみた私の見解です。

SQL Server 2012インスタンスとSSMSバージョンを使用して、アプリケーション名イベントを除いたイベントセッションを作成しました。

IF EXISTS (SELECT name FROM sys.dm_xe_sessions WHERE Name = 'PySoup tracing')
BEGIN
    DROP EVENT SESSION [PySoup tracing] ON SERVER
END

CREATE EVENT SESSION [PySoup tracing] ON SERVER 
ADD EVENT sqlserver.rpc_completed (ACTION(sqlserver.sql_text )),
ADD EVENT sqlserver.sp_statement_completed (ACTION(sqlserver.sql_text )),
ADD EVENT sqlserver.sql_batch_completed (ACTION(sqlserver.sql_text )),
ADD EVENT sqlserver.sql_statement_completed (ACTION(sqlserver.sql_text ))
ADD TARGET package0.event_file(SET filename=N'tracing.xel')--,
--ADD TARGET package0.ring_buffer(SET max_events_limit=(1000000))
GO

ALTER EVENT SESSION [PySoup tracing] ON SERVER
    STATE = START;

enter image description here

ライブデータビューアを閉じたり、セッションを停止したりしたことはありません。私はセッションのプロパティに入り、client_app_name。次に、出力を再度確認しましたが、すぐには反映されませんでしたが、期待どおりにアプリケーション名が表示され始めました。 enter image description here

SQL Server 2012以降では、セッションを停止して開始しなくても、セッションのプロパティを変更できます。そのため、停止/開始に煩わされることなく、フィールドの追加と削除、フィルターの組み込みなどを行うことができます。あなたの場合、これが本当かどうかはわかりませんが、ライブデータビューではディスパッチのレイテンシが変化します。拾うのにしばらく時間がかかったかもしれません。これについては、私の 別の質問への回答 で確認できます。

4
user507