查看与 SQL 跟踪事件类等效的扩展事件

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Microsoft Fabric 预览版中的 SQL 数据库

了解 SQL 跟踪事件如何映射到扩展事件和操作。 可以收集等效于 SQL 跟踪事件类和列的事件数据。

您可以使用以下过程查看与各 SQL 跟踪事件及其关联列等效的扩展事件的事件和操作。

若要运行 T-SQL 命令,请使用 SQL Server Management Studio (SSMS)Visual Studio Codesqlcmd 的 MSSQL 扩展或你喜欢的 T-SQL 查询工具。

使用查询编辑器查看等效于 SQL 跟踪事件的扩展事件

  • 在 SQL Server Management Studio 中的 查询编辑器 中,运行以下查询:

    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         AS te
        LEFT JOIN sys.trace_xe_event_map   AS em ON te.trace_event_id  = em.trace_event_id
        LEFT JOIN sys.trace_event_bindings AS tb ON em.trace_event_id  = tb.trace_event_id
        LEFT JOIN sys.trace_columns        AS tc ON tb.trace_column_id = tc.trace_column_id
        LEFT JOIN sys.trace_xe_action_map  AS am ON tc.trace_column_id = am.trace_column_id
    ORDER BY te.name, tc.name;
    

注意:

  • 如果除Event Class列之外的所有列都返回NULL,则事件类未从 SQL 跟踪迁移。

  • 如果在Extended Events action列中只有值为NULL,那么以下任一条件为真:

    • 映射到与扩展事件关联的数据字段之一SQL Trace column

    • 每个扩展事件的事件都具有在结果集中自动包括的数据字段的默认集合。

    • action 列没有有意义的等效扩展事件。 例如 SQL 跟踪中的 EventClass 列。 该列不是扩展事件中所必需的,因为事件名称起到相同作用。

  • 扩展事件使用单个事件替换用户可配置的 SQL 跟踪事件类(UserConfigurable:1 通过 UserConfigurable:9)。 事件命名 user_event。 此事件是使用 sp_trace_generateevent 引发的,该存储过程与 SQL 跟踪使用的存储过程相同。 无论将哪个事件 ID 传递到存储过程,该事件都会返回user_event。 但是, event_id 字段作为事件数据的一部分返回,可用于基于事件 ID 生成谓词。 例如,如果在代码中使用 UserConfigurable:0(事件 ID = 82),则可以将 user_event 事件添加到会话,并指定谓词 event_id = 82。 因此,无需更改代码,因为 sp_trace_generateevent 存储过程会生成扩展事件 user_event 事件和等效的 SQL 跟踪事件类。