Просмотр эквивалентов расширенных событий для классов событий трассировки 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
При просмотре результатов обратите внимание на следующее.
Если все столбцы, кроме столбца Event Class, возвращают значение NULL, значит данный класс событий не был перенесен из трассировки SQL.
Если единственным значением, содержащимся в столбце Extended Events action, является NULL, значит выполняется одно из следующих условий.
Столбец трассировки SQL сопоставлен с одним из полей данных, связанных с событием расширенных событий.
Примечание Каждое событие расширенных событий имеет набор полей данных по умолчанию, автоматически включаемых в результирующий набор.
Столбец действий не имеет эквивалента в расширенных событиях. Примером этого является столбец EventClass в трассировке SQL. Этот столбец не нужен в расширенных событиях, поскольку достаточно имени события.
Что касается настраиваемых пользователем классов событий трассировки SQL (с UserConfigurable:1 по UserConfigurable:9), в расширенных событиях вместо них используется одно событие. Имя события — user_event. Это событие вызывается с помощью хранимой процедуры sp_trace_generateevent, которая используется и в трассировке SQL. Событие user_event возвращается независимо от того, какой идентификатор события передается хранимой процедуре. Однако поле event_id возвращается вместе с другими данными о событии. Это позволяет составлять предикат на основе идентификатора события. Например, если в коде используется UserConfigurable:0 (идентификатор события = 82), то можно добавить событие user_event в сеанс и указать предикат «event_id = 82». Таким образом, нет необходимости менять код, поскольку хранимая процедура sp_trace_generateevent формирует событие расширенных событий user_event и эквивалентный класс событий трассировки SQL.
Если все столбцы, кроме столбца Event Class, возвращают значение NULL, значит данный класс событий не был перенесен из трассировки SQL.
Если единственным значением, содержащимся в столбце Extended Events action, является NULL, значит выполняется одно из следующих условий.
Столбец трассировки SQL сопоставлен с одним из полей данных, связанных с событием расширенных событий.
Примечание Каждое событие расширенных событий имеет набор полей данных по умолчанию, автоматически включаемых в результирующий набор.
Столбец действий не имеет эквивалента в расширенных событиях. Примером этого является столбец EventClass в трассировке SQL. Этот столбец не нужен в расширенных событиях, поскольку достаточно имени события.
Что касается настраиваемых пользователем классов событий трассировки SQL (с UserConfigurable:1 по UserConfigurable:9), в расширенных событиях вместо них используется одно событие. Имя события — user_event. Это событие вызывается с помощью хранимой процедуры sp_trace_generateevent, которая используется и в трассировке SQL. Событие user_event возвращается независимо от того, какой идентификатор события передается хранимой процедуре. Однако поле event_id возвращается вместе с другими данными о событии. Это позволяет составлять предикат на основе идентификатора события. Например, если в коде используется UserConfigurable:0 (идентификатор события = 82), то можно добавить событие user_event в сеанс и указать предикат «event_id = 82». Таким образом, нет необходимости менять код, поскольку хранимая процедура sp_trace_generateevent формирует событие расширенных событий user_event и эквивалентный класс событий трассировки SQL.