Published on

December 15, 2017

Исследование SQL Server Extended Events и Trace Events

SQL Server предоставляет два мощных инструмента для захвата и анализа событий: Extended Events (XE) и Trace Events. В то время как Extended Events является более новым и эффективным вариантом, многие профессионалы SQL Server все еще знакомы с Trace Events и могут потребоваться преобразовать свои существующие трассировки в Extended Events. В этой статье мы исследуем взаимосвязь между этими двумя инструментами и способы их эффективного использования.

Понимание карт

При работе с Extended Events Microsoft предоставляет нам полезный объект под названием sys.dm_xe_map_values. Этот объект помогает нам переводить значения данных внутри XEvents и исследовать внутренности SQL Server. Однако, в случае трассировки событий, у нас есть другой тип карты под названием sys.trace_xe_event_map. В отличие от sys.dm_xe_map_values, эта карта реализована в виде таблицы.

Таблица sys.trace_xe_event_map содержит соответствие между событиями Extended Event и событиями SQL Trace. Путем выполнения запроса к этой таблице мы можем увидеть связь между trace_event_id и именем XE события, а также пакетом XE, связанным с каждым событием.

Исследование соответствия

Давайте углубимся в исследование соответствия между событиями трассировки и событиями XEvents. Путем объединения таблицы sys.trace_xe_event_map с другими системными таблицами мы можем получить более подробную информацию о каждом событии.

Например, мы можем выполнить следующий запрос:

SELECT xm.xe_event_name,
       te.name AS trace_event_name,
       tc.name AS TraceCategory,
       sub.PackageName,
       sub.DLLName,
       sub.file_version,
       sub.product_version
FROM sys.trace_xe_event_map xm
RIGHT OUTER JOIN sys.trace_events te
    ON xm.trace_event_id = te.trace_event_id
RIGHT OUTER JOIN sys.trace_categories tc
    ON te.category_id = tc.category_id
LEFT OUTER JOIN (
    SELECT xo.name AS EventName,
           xo.description AS EventDescription,
           xp.name AS PackageName,
           REVERSE(LEFT(REVERSE(olm.name), CHARINDEX('', REVERSE(olm.name))-1)) AS DLLName,
           olm.file_version,
           olm.product_version
    FROM sys.dm_xe_objects xo
    INNER JOIN sys.dm_xe_packages xp
        ON xo.package_guid = xp.guid
    INNER JOIN sys.dm_os_loaded_modules olm
        ON xp.module_address = olm.base_address
    WHERE xo.object_type = 'event'
) sub
    ON xm.xe_event_name = sub.EventName
    AND xm.package_name = sub.PackageName
ORDER BY xm.xe_event_name, tc.name;

Этот запрос предоставит нам всесторонний обзор соответствия между событиями трассировки и событиями XEvents. Мы можем увидеть имя XE события, имя события трассировки, категорию трассировки, имя пакета XE, имя DLL, версию файла и версию продукта.

Понимание многократного соответствия

Один интересный аспект соответствия – это многократное соответствие между событиями трассировки и событиями XEvents. Выполнив следующий запрос, мы можем определить trace_event_id, у которого есть несколько соответствий:

SELECT trace_event_id
FROM sys.trace_xe_event_map
GROUP BY trace_event_id
HAVING COUNT(trace_event_id) > 1;

Например, предположим, что мы обнаружили, что у trace_event_id 165 есть несколько соответствий. Затем мы можем получить соответствующее имя XE события и имя события трассировки с помощью следующего запроса:

SELECT em.package_name, em.xe_event_name, te.name AS trace_event_name
FROM sys.trace_xe_event_map em
INNER JOIN sys.trace_events te
    ON em.trace_event_id = te.trace_event_id
WHERE em.trace_event_id = 165;

Это даст нам ясное представление о событиях, у которых есть несколько соответствий, и их соответствующих именах XE событий и именах событий трассировки.

Преобразование трассировок в Extended Events

С помощью информации, предоставленной соответствием, мы теперь можем преобразовать наши существующие SQL трассировки в Extended Events. Используя возможности XE, мы можем создавать высокопроизводительные и эффективные трассировки, которые более мощны, чем их аналоги на основе профайлера.

Если вас интересует более подробное изучение Extended Events, я рекомендую прочитать мою серию статей “60 дней” о Extended Events. Эта серия охватывает широкий спектр тем и предоставляет глубокие знания по данной теме.

В заключение, понимание соответствия между Extended Events и Trace Events является важным для профессионалов SQL Server. Исследуя соответствие и используя возможности Extended Events, мы можем оптимизировать процессы захвата и анализа событий.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.