Published on

September 28, 2015

Динамическое извлечение данных файла событий SQL Server

В предыдущей статье мы обсудили основы извлечения полезной нагрузки для событий в сеансе из цели 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”. Если вы пропустили какие-либо предыдущие статьи или хотите освежить память, вы можете найти оглавление здесь.

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.