SQL Server - 拡張イベントで収集できるイベントデータを確認するクエリ

拡張イベントで収集できるイベントデータを確認するクエリです。

動的管理ビューを3つ使います。sys.dm_xe_packages、sys.dm_xe_objects、sys.dm_xe_object_columnsの3つ。

動的管理ビュー 概要
sys.dm_xe_packages (Transact-SQL) パッケージ一覧。イベントはパッケージによってグルーピングされています。
sys.dm_xe_objects (Transact-SQL) イベント(オブジェクト)一覧。収集したいイベントを確認できます。
sys.dm_xe_object_columns (Transact-SQL) オブジェクトのカラム一覧。イベントが収集されるときにどんなデータが含まれるかを確認できます。イベントデータというかイベントの属性というか。

収集できるイベントデータを確認するクエリがこちらです。例としてsql_batch_completedイベントのイベントデータを確認しています。

-- sql_batch_completedイベントのイベントデータを確認する
select
    xe_oc.name as column_name,
    xe_oc.column_type as column_type,
    xe_oc.type_name as type_name,
    xe_oc.description as column_description
from sys.dm_xe_packages as xe_p
    inner join sys.dm_xe_objects as xe_o
        on xe_p.guid = xe_o.package_guid
    inner join sys.dm_xe_object_columns as xe_oc
        on xe_o.package_guid = xe_oc.object_package_guid and
            xe_o.name = xe_oc.object_name
where
    -- sys.dm_xe_objectsにはアクション・ターゲットなどイベント以外も含まれるので
    -- object_type = N'event'でフィルタ
    xe_o.object_type = N'event' and
    xe_p.name = N'sqlserver' and
    xe_o.name = N'sql_batch_completed';

結果です。(空白などは調整してあります。)

column_name         column_type   type_name          column_description
------------------- ------------- ------------------ -------------------------------------------------------------------------------------
UUID                readonly      guid_ptr           グローバル一意 ID
VERSION             readonly      uint8              イベント スキーマのバージョン
CHANNEL             readonly      etw_channel        ETW チャネル
KEYWORD             readonly      keyword_map        関連キーワード
collect_batch_text  customizable  boolean            0 に設定すると、collect_batch_text によって batch_text の収集が無効になります。既定では、batch_text 列が生成されます。
cpu_time            data          uint64             バッチによって使用される CPU 時間 (ミリ秒)。
duration            data          uint64             バッチ完了にかかった時間 (マイクロ秒)。
physical_reads      data          uint64             バッチによって発行された、物理ページの読み取り回数。
logical_reads       data          uint64             バッチによって発行された、論理ページの読み取り回数。
writes              data          uint64             NULL
row_count           data          uint64             バッチによって返された行数。
result              data          rpc_return_result  バッチの実行結果を示します。
batch_text          data          unicode_string     実行されているバッチのテキスト。

column_typeがdataの行が実行時に収集されるイベントデータです。column_typeがcustomizableの行は収集するかどうかを設定できます。readonlyは固定値?まだよくわからず。

ついでにrpc_completedイベントのイベントデータも確認しておきます。where句以外は上記と同じクエリです。

-- rpc_completedイベントのイベントデータを確認する
select
    xe_oc.name as column_name,
    xe_oc.column_type as column_type,
    xe_oc.type_name as type_name,
    xe_oc.description as column_description
from sys.dm_xe_packages as xe_p
    inner join sys.dm_xe_objects as xe_o
        on xe_p.guid = xe_o.package_guid
    inner join sys.dm_xe_object_columns as xe_oc
        on xe_o.package_guid = xe_oc.object_package_guid and
            xe_o.name = xe_oc.object_name
where
    xe_o.object_type = N'event' and
    xe_p.name = N'sqlserver' and
    xe_o.name = N'rpc_completed';

結果。

column_name                column_type   type_name                 column_description
-------------------------- ------------- ------------------------- --------------------------------------------------------------------------------------------------------------
UUID                       readonly      guid_ptr                  グローバル一意 ID
VERSION                    readonly      uint8                     イベント スキーマのバージョン
CHANNEL                    readonly      etw_channel               ETW チャネル
KEYWORD                    readonly      keyword_map               関連キーワード
collect_statement          customizable  boolean                   0 に設定すると、collect_statement によって statement の収集が無効になります。既定では、statement 列が生成されます。
collect_data_stream        customizable  boolean                   1 に設定すると、collect_data_stream によって data_stream の収集が有効になります。既定では、data_stream 列は生成されません。
collect_output_parameters  customizable  boolean                   1 に設定すると、collect_output_parameters によって output_parameters の収集が有効になります。既定では、output_parameters 列は生成されません。
cpu_time                   data          uint64                    NULL
duration                   data          uint64                    リモート プロシージャ呼び出しが完了するまでにかかった時間 (マイクロ秒)。
physical_reads             data          uint64                    リモート プロシージャ呼び出しによって発行された、物理ページの読み取り回数。
logical_reads              data          uint64                    リモート プロシージャ呼び出しによって発行された、論理ページの読み取り回数。
writes                     data          uint64                    NULL
result                     data          rpc_return_result         リモート プロシージャ呼び出しからの戻り値。
row_count                  data          uint64                    リモート プロシージャ呼び出しによって返された行数。
connection_reset_option    data          connection_reset_option   接続のリセットに使用されたオプション。このフィールドは、接続のリセット リモート プロシージャ呼び出しでのみ使用できます。
object_name                data          unicode_string            リモート プロシージャ呼び出しで参照されていたオブジェクトの名前。
statement                  data          unicode_string            リモート プロシージャ呼び出しで実行されたステートメントのテキスト。
data_stream                data          binary_data               トレースの再生に使用される、リモート プロシージャ呼び出しのバイナリ ストリーム。
output_parameters          data          xml                       リモート プロシージャ呼び出しから返された出力パラメーター。

SQL Server 2016で確認しています。