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

如果要使用扩展事件收集与 SQL 跟踪事件类和列等效的事件数据,了解 SQL 跟踪事件如何映射到扩展事件的事件和操作会非常有帮助。

可以使用以下过程来查看与每个 SQL 跟踪事件及其关联列相对应的扩展事件和操作。

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

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

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

查看结果时,请注意以下事项:

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

  • 如果仅扩展事件作列中的值为 NULL,则表示以下任一条件为 true:

    • SQL 跟踪列映射到与扩展事件事件关联的数据字段之一。

      注释

      每个扩展事件事件都有一组默认的数据字段,这些字段自动包含在结果集中。

    • 操作列没有找到有意义的扩展事件等效项。 下面是 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 跟踪事件类。

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

  • 如果仅扩展事件作列中的值为 NULL,则表示以下任一条件为 true:

    • SQL 跟踪列映射到与扩展事件事件关联的数据字段之一。

      注释

      每个扩展事件事件都有一组默认的数据字段,这些字段自动包含在结果集中。

    • 操作列没有对应的有意义的扩展事件。 下面是 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 跟踪事件类。

另请参阅

sp_trace_generateevent(Transact-SQL)