В предыдущей статье мы обсудили основы извлечения полезной нагрузки для событий в сеансе из цели event_file. Однако простое знание, как извлечь данные на базовом уровне, недостаточно или неэффективно. В этой статье мы пойдем дальше и исследуем более эффективный способ получения файла и пути, основываясь исключительно на имени сеанса.
При извлечении данных из цели event_file наиболее простым способом требуется знать каталог, в котором размещены файлы, и имена файлов для сеанса. Но что, если вы не создавали сеанс или если файл или местоположение изменились без документации? Нам нужен более динамический подход.
Чтобы динамически получить файл и путь на основе имени сеанса, мы можем использовать представление sys.dm_xe_session_targets. Это представление содержит столбец с именем target_data, который содержит XML-данные, включающие местоположение файла событий. Путем запроса этого представления и объединения его с представлением sys.dm_xe_sessions мы можем получить target_data для цели event_file, связанной с определенным сеансом.
После получения target_data мы можем использовать оператор APPLY для разбора XML и извлечения пути к файлу. Затем мы можем передать этот путь к файлу функции sys.fn_xe_file_target_read_file для чтения данных событий из файла.
Вот пример запроса, демонстрирующего этот процесс:
SELECT CONVERT(XML, t2.event_data) AS event_data
FROM (
SELECT target_data = CONVERT(XML, target_data)
FROM sys.dm_xe_session_targets t
INNER JOIN sys.dm_xe_sessions s ON t.event_session_address = s.address
WHERE t.target_name = 'event_file'
AND s.name = 'demosession'
) cte1
CROSS APPLY cte1.target_data.nodes('//EventFileTarget/File') FileEvent ( FileTarget )
CROSS APPLY sys.fn_xe_file_target_read_file(FileEvent.FileTarget.value('@name', 'varchar(1000)'), NULL, NULL, NULL) t2
Этот запрос извлекает данные событий из цели event_file для сеанса ‘demosession’. Он динамически создает путь к файлу на основе имени сеанса и использует оператор APPLY для разбора XML и чтения данных событий из файла.
Следуя этому подходу, нам больше не нужно знать точный путь для сеанса, чтобы запросить данные в нем. Однако рекомендуется документировать путь для будущего использования.
В следующей статье мы обсудим “Лучшие практики” для чтения данных файла событий, включая способ динамического создания этого процесса для любого сеанса, даже если он в настоящее время не запущен.
Спасибо за прочтение этой статьи в серии “60 дней XE”. Если вы пропустили какие-либо предыдущие статьи или хотите освежить память, вы можете найти оглавление здесь.