0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SQLトレースと拡張イベントのイベントの対応を取得する

Posted at

動機

SQL Server で拡張イベントのセッションを設定中に「SQLトレースでいうあのイベントがないな…」という場面が稀によくあります。
具体的には SP:Completed に該当するイベントが見つからなくて困っていました。

調査方法

そんなときは下記記事を参考にイベントの対応を確認するクエリを実行しましょう。
SQL トレースのイベント クラスと等価な拡張イベントを確認する

クエリ

USE MASTER;
GO
SELECT DISTINCT
    tb.trace_event_id,
    te.name            AS 'Event Class',
    em.package_name    AS 'Package',
    em.xe_event_name   AS 'XEvent Name',
    tb.trace_column_id,
    tc.name            AS 'SQL Trace Column',
    am.xe_action_name  AS 'Extended Events action'
FROM
              sys.trace_events         te
    LEFT JOIN sys.trace_xe_event_map   em ON te.trace_event_id  = em.trace_event_id
    LEFT JOIN sys.trace_event_bindings tb ON em.trace_event_id  = tb.trace_event_id
    LEFT JOIN sys.trace_columns        tc ON tb.trace_column_id = tc.trace_column_id
    LEFT JOIN sys.trace_xe_action_map  am ON tc.trace_column_id = am.trace_column_id
ORDER BY te.name, tc.name

結果(一部抜粋)

trace_event_id Event Class Package XEvent Name trace_column_id SQL Trace Column Extended Events action
43 SP:Completed sqlserver module_end 1 TextData NULL
43 SP:Completed sqlserver module_end 2 BinaryData NULL
43 SP:Completed sqlserver module_end 3 DatabaseID database_id
43 SP:Completed sqlserver module_end 4 TransactionID transaction_id
43 SP:Completed sqlserver module_end 5 LineNumber tsql_frame
43 SP:Completed sqlserver module_end 6 NTUserName nt_username
43 SP:Completed sqlserver module_end 7 NTDomainName nt_username
43 SP:Completed sqlserver module_end 8 HostName client_hostname
43 SP:Completed sqlserver module_end 9 ClientProcessID client_pid
43 SP:Completed sqlserver module_end 10 ApplicationName client_app_name
43 SP:Completed sqlserver module_end 11 LoginName server_principal_name
43 SP:Completed sqlserver module_end 12 SPID session_id

SQLトレースでいう SP:Completed を拡張イベントで取得するには、module_end で取得すればいいことが分かりました。

余談

イベントを探す目的では、セッションを作成する際にフィルターをかけても探せます。
RPC:Completedrpc_completed としてあるし、
SP:StmtCompletedsp_statement_completed としてあるし、
SP:Completed は sp_completed だよねーと思ったらまさかの module_end だったのでないものと思い込んでました、反省。
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?