查看与 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,则表示以下两个条件之一成立:

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

      注意

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

    • 操作列不具有等效的有意义的扩展事件。 与此有关的一个示例就是 SQL 跟踪中的“事件类”列。 该列不是扩展事件中所必需的,因为事件名称起到相同作用。

  • 对于用户可配置 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,则表示以下两个条件之一成立:

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

      注意

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

    • 操作列不具有等效的有意义的扩展事件。 与此有关的一个示例就是 SQL 跟踪中的“事件类”列。 该列不是扩展事件中所必需的,因为事件名称起到相同作用。

  • 对于用户可配置 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)