Поделиться через


sys.fn_xe_file_target_read_file (Transact-SQL)

Применимо к:SQL ServerБаза данных SQL AzureУправляемый экземпляр SQL AzureБаза данных SQL в Microsoft Fabric

Считывает файлы XEL журнала событий, созданные целевым объектом расширенных событий event_file . Каждая строка в результирующем наборе представляет событие. Данные события возвращаются в формате XML.

Файлы XEL также можно считывать SQL Server Management Studio. Пошаговое руководство см . в кратком руководстве по расширенным событиям.

Соглашения о синтаксисе Transact-SQL

Синтаксис

sys.fn_xe_file_target_read_file ( path , mdpath , initial_file_name , initial_offset )

Аргументы

path

Путь к файлам для чтения. путьnvarchar(260) без значения по умолчанию.

  • При использовании с файлами в локальной файловой системе путь должен содержать имя файла журнала сеанса событий. Имя файла может содержать * подстановочный знак для чтения данных из нескольких файлов.

  • При использовании с большими двоичными объектами в контейнере службы хранилища Azure путь — это URL-адрес HTTP, созданный объединением двух частей:

    1. Путь к контейнеру хранилища Azure, за которым следует косая черта (/).

    2. Общий префикс для имен больших двоичных объектов в контейнере, который должен быть прочитан. Чтобы прочитать один большой двоичный объект, используйте полное имя большого двоичного объекта.

    Например, использование https://<storage-account-name>.blob.core.windows.net/container-name>/xe_session в качестве пути извлекает данные из всех больших двоичных объектов с именами, начиная xe_sessionс, и независимо от оставшейся части имени большого двоичного объекта, включая расширение. Не удается указать подстановочные знаки.

mdpath

Путь к файлу метаданных, который соответствует файлу или файлам, указанным аргументом пути . mdpathnvarchar(260) без значения по умолчанию.

В SQL Server 2012 (11.x) и более поздних версиях этот параметр не нужен. Он сохраняется для обратной совместимости для файлов журналов, созданных в предыдущих версиях SQL Server. В SQL Server 2016 (13.x) и более поздних версиях этот параметр можно указать так NULL, как .xem файлы больше не используются.

initial_file_name

Первый файл для чтения из пути. initial_file_name — nvarchar(260) без значения по умолчанию. Если NULL аргумент указан в качестве аргумента, все файлы, найденные в пути , считываются.

Имя файла должно быть значением, возвращаемым в результирующем наборе sys.fn_xe_file_target_read_file вызова функции с тем же путем.

initial_offset

Используется для указания последнего смещения, прочитанного ранее. Пропускает все события до смещения (включительно). Перечисление событий начинается после указанного смещения. initial_offset является bigint. Если NULL задан в качестве аргумента, весь файл считывается.

Примечание.

initial_file_name и initial_offset являются парными аргументами. Если указать значение для любого аргумента, необходимо указать значение для другого аргумента.

Таблица возвращенной информации

Имя столбца Тип данных Description
module_guid uniqueidentifier Идентификатор GUID модуля событий. Не допускает значения NULL.
package_guid uniqueidentifier Идентификатор GUID пакета событий. Не допускает значения NULL.
object_name nvarchar(256) Имя события. Не допускает значения NULL.
event_data nvarchar(max) Содержимое события в формате XML. Не допускает значения NULL.
file_name nvarchar(260) Имя файла, содержащего событие. Не допускает значения NULL.
file_offset bigint Смещение блока в файле, содержащем событие. Не допускает значения NULL.
timestamp_utc datetime2(7) Дата и время (часовой пояс UTC) события. Не допускает значения NULL.

Область применения: SQL Server 2017 (14.x) и более поздних версий, Базы данных SQL Azure и Управляемого экземпляра SQL Azure.

Замечания

Чтение больших результирующих наборов путем выполнения sys.fn_xe_file_target_read_file в Management Studio может привести к ошибке. Используйте результаты в режиме файлов (в СРЕДЕ SQL Server Management Studio, CTRL+SHIFT+F) для экспорта больших результирующих наборов в удобочитаемый файл, чтобы считывать файл с другим средством.

SQL Server 2008 (10.0.x) и SQL Server 2008 R2 (10.50.x) принимают результаты трассировки, созданные в формате XEL и XEM. Расширенные события SQL Server 2012 (11.x) поддерживают только результаты трассировки в формате XEL. Рекомендуется использовать Management Studio для чтения результатов трассировки в формате XEL.

Azure SQL

В Управляемом экземпляре SQL Azure или базе данных SQL Azure файлы, созданные event_file целевым объектом, всегда хранятся в виде больших двоичных объектов в контейнере службы хранилища Azure.

Вы можете считывать sys.fn_xe_file_target_read_file данные из этих BLOB-объектов, если учетные данные, разрешающие доступ к контейнеру службы хранилища Azure, существуют. Пошаговые инструкции см. в статье "Создание сеанса событий с event_file целевым объектом в службе хранилища Azure".

Если указать путь к локальной файловой системе, вы получите сообщение об ошибке, аналогичное следующему:

Msg 40538, Level 16, State 3, Line 15
A valid URL beginning with 'https://' is required as value for any filepath specified.

Разрешения

В SQL Server 2019 (15.x) и предыдущих версиях требуется VIEW SERVER STATE разрешение на сервере.

В SQL Server 2022 (16.x) и более поздних версиях требуется VIEW SERVER PERFORMANCE STATE разрешение на сервере.

Примеры

А. Получение данных из файлов в локальной файловой системе

Для SQL Server 2014 (12.x) и предыдущих версий следующий пример получает все строки из всех файлов, включая .xel и .xem файл. В этом примере целевые объекты и метафайлы файлов находятся в папке трассировки в папке C:\traces\ .

SELECT *
FROM sys.fn_xe_file_target_read_file('C:\traces\*.xel', 'C:\traces\metafile.xem', NULL, NULL);

В SQL Server 2016 (13.x) и более поздних версиях следующий пример извлекает события внутри всех .xel файлов в папке по умолчанию. Расположение по умолчанию находится \MSSQL\Log в папке установки экземпляра.

SELECT *
FROM sys.fn_xe_file_target_read_file('*.xel', NULL, NULL, NULL);

В SQL Server 2017 (14.x) и более поздних версиях в следующем примере извлекаются только данные из последнего дня из встроенного сеанса system_health. Сеанс system_health — это сеанс расширенных событий, включенный по умолчанию в SQL Server. Дополнительные сведения см. в разделе "Использование сеанса system_health".

SELECT *
FROM sys.fn_xe_file_target_read_file('system_health*.xel', NULL, NULL, NULL)
WHERE CAST (timestamp_utc AS DATETIME2 (7)) > DATEADD(DAY, -1, GETUTCDATE());

В. Получение данных из больших двоичных объектов в контейнере службы хранилища Azure

Считывайте данные из всех больших двоичных объектов в контейнере с именами, начиная xe_session_с.

SELECT *
FROM sys.fn_xe_file_target_read_file(
    'https://<storage-account-name>.blob.core.windows.net/<container-name>/xe_session_',
    NULL,
    NULL,
    NULL
);

Чтение данных из большого xe_session_0_133614763336380000.xel двоичного объекта.

SELECT *
FROM sys.fn_xe_file_target_read_file(
    'https://<storage-account-name>.blob.core.windows.net/<container-name>/xe_session_0_133614763336380000.xel',
    NULL,
    NULL,
    NULL
);

Чтение данных из большого xe_session_0_133614763336380000.xel двоичного объекта, начиная с смещения 33280.

SELECT *
FROM sys.fn_xe_file_target_read_file(
    'https://<storage-account-name>.blob.core.windows.net/<container-name>/xe_session_',
    NULL,
    'https://<storage-account-name>.blob.core.windows.net/<container-name>/xe_session_0_133614763336380000.xel',
    33280
);