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


СОЗДАТЬ СЕССИЮ СОБЫТИЙ (Transact-SQL)

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

Создает сеанс расширенных событий, определяющий события для сбора, целевых объектов сеанса событий и параметров сеанса событий.

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

Синтаксис

CREATE EVENT SESSION event_session_name
ON { SERVER | DATABASE }
{
    <event_definition> [ , ...n ]
    [ <event_target_definition> [ , ...n ] ]
    [ WITH ( <event_session_options> [ , ...n ] ) ]
}
;

<event_definition>::=
{
    ADD EVENT [event_module_guid].event_package_name.event_name
         [ ( {
                 [ SET { event_customizable_attribute = <value> [ , ...n ] } ]
                 [ ACTION ( { [event_module_guid].event_package_name.action_name [ , ...n ] } ) ]
                 [ WHERE <predicate_expression> ]
        } ) ]
}

<predicate_expression> ::=
{
    [ NOT ] <predicate_factor> | { ( <predicate_expression> ) }
    [ { AND | OR } [ NOT ] { <predicate_factor> | ( <predicate_expression> ) } ]
    [ , ...n ]
}

<predicate_factor>::=
{
    <predicate_leaf> | ( <predicate_expression> )
}

<predicate_leaf>::=
{
      <predicate_source_declaration> { = | < > | != | > | >= | < | <= } <value>
    | [event_module_guid].event_package_name.predicate_compare_name ( <predicate_source_declaration> , <value> )
}

<predicate_source_declaration>::=
{
    event_field_name | ( [event_module_guid].event_package_name.predicate_source_name )
}

<value>::=
{
    number | 'string'
}

<event_target_definition>::=
{
    ADD TARGET [event_module_guid].event_package_name.target_name
        [ ( SET { target_parameter_name = <value> [ , ...n ] } ) ]
}

<event_session_options>::=
{
    [       MAX_MEMORY = size [ KB | MB ] ]
    [ [ , ] EVENT_RETENTION_MODE = { ALLOW_SINGLE_EVENT_LOSS | ALLOW_MULTIPLE_EVENT_LOSS | NO_EVENT_LOSS } ]
    [ [ , ] MAX_DISPATCH_LATENCY = { seconds SECONDS | INFINITE } ]
    [ [ , ] MAX_EVENT_SIZE = size [ KB | MB ] ]
    [ [ , ] MEMORY_PARTITION_MODE = { NONE | PER_NODE | PER_CPU } ]
    [ [ , ] TRACK_CAUSALITY = { ON | OFF } ]
    [ [ , ] STARTUP_STATE = { ON | OFF } ]
    [ [ , ] MAX_DURATION = { <time duration> { SECONDS | MINUTES | HOURS | DAYS } | UNLIMITED } ]
}

Аргументы

event_session_name

Определяемое пользователем имя сеанса событий. event_session_name является буквенно-цифровым, может быть до 128 символов, должен быть уникальным в экземпляре SQL Server и должен соответствовать правилам для идентификаторов базы данных.

НА { СЕРВЕРЕ | БАЗА ДАННЫХ }

Определяет, находится ли сеанс событий в контексте сервера или базы данных.

Azure SQL Database и SQL Database в Microsoft Fabric требуют DATABASE.

ADD EVENT [event_module_guid]. event_package_name. event_name

Событие, которое необходимо связать с сеансом событий, где:

  • event_module_guid — идентификатор GUID для модуля, содержащего событие;
  • event_package_name — это пакет, содержащий событие.
  • event_name — это имя события.

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

SELECT o.name AS event_name,
       o.description AS event_description,
       p.name AS package_name,
       p.description AS package_description
FROM sys.dm_xe_objects AS o
     INNER JOIN sys.dm_xe_packages AS p
         ON o.package_guid = p.guid
WHERE o.object_type = 'event'
ORDER BY event_name ASC;

SET { event_customizable_attribute = <значение> [ ,... n ] }

Настраиваемые атрибуты для события.

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

SELECT object_name,
       name AS column_name,
       type_name,
       column_value,
       description
FROM sys.dm_xe_object_columns
WHERE object_name = 'event-name-placeholder'
      AND column_type = 'customizable'
ORDER BY column_name ASC;

ACTION ( { [event_module_guid].event_package_name. action_name [ ,...n ] })

Действие, которое необходимо связать с событием, где:

  • event_module_guid — это GUID модуля, содержащего действие.
  • event_package_name — это пакет, содержащий действие.
  • action_name — это имя действия.

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

SELECT o.name AS action_name,
       o.description AS action_description,
       p.name AS package_name,
       p.description AS package_description
FROM sys.dm_xe_objects AS o
     INNER JOIN sys.dm_xe_packages AS p
         ON o.package_guid = p.guid
WHERE o.object_type = 'action'
ORDER BY action_name ASC;

ГДЕ <predicate_expression>

Задает выражение предиката, используемое, чтобы определить необходимость обработки события. Если <predicate_expression> имеет значение true, то обработка события продолжается действиями и целевыми объектами сеанса. Если <predicate_expression> имеет значение false, событие удаляется, избегая дополнительных действий и целевой обработки. Каждое выражение предиката ограничено 3000 символами.

event_field_name

Имя поля события, определяющего источник предиката.

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

SELECT oc.name AS field_name,
       oc.type_name AS field_type,
       oc.description AS field_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
INNER JOIN sys.dm_xe_object_columns AS oc
ON o.name = oc.object_name
   AND
   o.package_guid = oc.object_package_guid
WHERE o.object_type = 'event'
      AND
      o.name = 'event-name-placeholder'
      AND
      oc.column_type = 'data'
ORDER BY field_name ASC;

[event_module_guid]. event_package_name. predicate_source_name

Имя глобального источника предиката, в котором:

  • event_module_guid — идентификатор GUID для модуля, содержащего событие;
  • event_package_name — это пакет, содержащий исходный объект предиката.
  • predicate_source_name — это имя источника предиката.

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

SELECT o.name AS predicate_source_name,
       o.description AS predicate_source_description,
       p.name AS package_name,
       p.description AS package_description
FROM sys.dm_xe_objects AS o
     INNER JOIN sys.dm_xe_packages AS p
         ON o.package_guid = p.guid
WHERE o.object_type = 'pred_source'
ORDER BY predicate_source ASC;

[event_module_guid].event_package_name.predicate_compare_name

Имя объекта сравнения предиката, где:

  • event_module_guid — идентификатор GUID для модуля, содержащего событие;
  • event_package_name — это пакет, содержащий объект сравнения предиката.
  • predicate_compare_name — это имя предиката сравнения.

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

SELECT o.name AS predicate_comparator_name,
       o.description AS predicate_comparator_description,
       p.name AS package_name,
       p.description AS package_description
FROM sys.dm_xe_objects AS o
     INNER JOIN sys.dm_xe_packages AS p
         ON o.package_guid = p.guid
WHERE o.object_type = 'pred_compare'
ORDER BY predicate_comparator ASC;

номер

Любой числовый тип, который может быть представлен как 64-разрядное целое число.

"string"

Строка ANSI или Юникод, необходимые для компаратора предиката. Для функций предикатного сравнения не выполняется неявное преобразование строкового типа. Передача значения неожиданного типа приводит к ошибке.

ADD TARGET [event_module_guid]. event_package_name. target_name

Цель, связываемая с сеансом событий, где:

  • event_module_guid — это GUID модуля, содержащего целевой объект.
  • event_package_name — это пакет, содержащий целевой объект.
  • target_name — это целевое имя.

Доступные целевые объекты можно найти, выполнив следующий запрос:

SELECT o.name AS target_name,
       o.description AS target_description,
       o.capabilities_desc,
       p.name AS package_name,
       p.description AS package_description
FROM sys.dm_xe_objects AS o
     INNER JOIN sys.dm_xe_packages AS p
         ON o.package_guid = p.guid
WHERE o.object_type = 'target'
ORDER BY target_name ASC;

Сеанс событий может иметь ноль, один или несколько целевых объектов. Все целевые объекты, добавленные в сеанс событий, должны отличаться. Например, нельзя добавить второй event_file целевой объект в сеанс, который уже имеет целевой event_file объект.

Дополнительные сведения, включая примеры использования для часто используемых целевых объектов, см. в разделе целевых объектов расширенных событий.

SET { target_parameter_name = <значение> [ , ... n ] }

Задает параметр целевого объекта.

Чтобы просмотреть все целевые параметры и их описания, выполните следующий запрос, заменив target-name-placeholder целевое имя, например event_file, ring_buffer, histogramи т. д.:

SELECT name AS target_parameter_name,
       column_value AS default_value,
       description
FROM sys.dm_xe_object_columns
WHERE column_type = 'customizable'
      AND object_name = 'target-name-placeholder';

Внимание

Если вы используете целевой объект буфера кольца, рекомендуется задать MAX_MEMORYцелевой параметр (отличный от MAX_MEMORY параметра сеанса) значение 1024 килобайта (КБ) или меньше, чтобы избежать возможного усечения данных выходных данных XML.

Дополнительные сведения о целевых типах см. в разделе "Целевые объекты расширенных событий".

WITH ( <event_session_options [ ,...>n ] )

Указывает параметры, используемые в сеансе событий.

MAX_MEMORY = размер [ КБ | МБ ]

Задает максимальный объем памяти, выделенной в сеансе для буферов событий. Значение по умолчанию — 4 Мб. размер — целое значение, которое может указываться в килобайтах (Кб) или мегабайтах (Мб). Максимальная сумма не может превышать 2 ГБ (2048 МБ). Однако использование значений памяти в диапазоне ГБ не рекомендуется.

EVENT_RETENTION_MODE = { ALLOW_SINGLE_EVENT_LOSS | ALLOW_MULTIPLE_EVENT_LOSS | NO_EVENT_LOSS }

Задает режим хранения событий, используемый для обработки потери события.

  • ALLOW_SINGLE_EVENT_LOSS

    Возможна потеря события в сеансе. Если все буферы событий полны, то удаляется только одно событие. Потеря одного события при заполнении буферов событий сводит к минимуму влияние на производительность, а также минимизирует потерю данных в обрабатываемом потоке событий.

  • ALLOW_MULTIPLE_EVENT_LOSS

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

  • NO_EVENT_LOSS

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

    Примечание.

    Для целевых файлов событий в Azure SQL Database, SQL Database в Microsoft Fabric и Azure SQL Managed Instance (с политикой обновления SQL Server 2025 или Al-up-to-date update), начиная с июня 2024 года, NO_EVENT_LOSS ведёт себя так же, как .ALLOW_SINGLE_EVENT_LOSS Если указать NO_EVENT_LOSS, предупреждение с идентификатором сообщения 25665, серьезностью 10 и возвращается сообщение This target doesn't support the NO_EVENT_LOSS event retention mode. The ALLOW_SINGLE_EVENT_LOSS retention mode is used instead. , а сеанс создается.

    Это изменение позволяет избежать времени ожидания подключения, задержек отработки отказа и других проблем, которые могут снизить доступность базы данных при NO_EVENT_LOSS использовании с целевыми объектами файлов событий в хранилище BLOB-объектов Azure.

    NO_EVENT_LOSS планируется удалить как поддерживаемый EVENT_RETENTION_MODE аргумент в будущих обновлениях Azure SQL Database, SQL Database в Microsoft Fabric и Azure SQL Managed Instance. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.

MAX_DISPATCH_LATENCY = { секунды | INFINITE }

Задает промежуток времени, в течение которого события находятся в буферной памяти перед отправкой в цели сеанса событий. По умолчанию это значение равно 30 секундам.

  • товары второго сортаSECONDS

    Время ожидания (в секундах) перед началом выгрузки содержимого буферов в цели. seconds является целым числом. Минимальное значение задержки составляет 1 секунду. Чтобы задать неограниченную задержку (INFINITE), можно использовать значение 0.

  • БЕСКОНЕЧНЫЙ

    Запись на диск буферов в цели только при заполнении буферов или закрытии сеанса событий.

MAX_EVENT_SIZE = размер [ КБ | МБ ]

Задает максимальный допустимый размер для событий. MAX_EVENT_SIZE следует задать только для разрешения отдельных событий, превышающих MAX_MEMORY; Если задать значение меньше MAX_MEMORY возникает ошибка. size — целое значение, которое может быть представлено значением в килобайтах (КБ) или мегабайтах (МБ). Если значение size указано в килобайтах, то минимально допустимое значение — 64 KБ. Если задано MAX_EVENT_SIZE, в дополнение к MAX_MEMORY создаются два буфера размера , а общая память, используемая для буферизации событий, MAX_MEMORY + 2 * MAX_EVENT_SIZE.

MEMORY_PARTITION_MODE = { НЕТ | PER_NODE | PER_CPU }

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

  • НИКАКОЙ

    В экземпляре ядра СУБД создается один набор буферов.

  • PER_NODE

    Для каждого узла NUMA создается набор буферов.

  • PER_CPU

    Набор буферов создается для каждого ЦП.

TRACK_CAUSALITY = { ON | OFF }

Указывает, будут ли отслеживаться причинно-следственные связи. Если отслеживание включено, то причинность позволяет коррелировать связанные события в различных серверных соединениях.

STARTUP_STATE = { ON | OFF }

Указывает, следует ли автоматически запускать этот сеанс событий при запуске SQL Server.

Примечание.

Если STARTUP_STATE = ONсеанс событий запускается, когда ядро СУБД остановлено, а затем перезапущено. Чтобы немедленно запустить сеанс событий, используйте .ALTER EVENT SESSION ... ON SERVER STATE = START

  • DNS

    Сеанс событий запускается при запуске.

  • ВЫКЛ.

    Сеанс событий не запускается при запуске.

MAX_DURATION = { длительность времени { СЕКУНД | MINUTES | ЧАСЫ | DAYS } | НЕОГРАНИЧЕННЫЙ }

Применимо к: SQL Server 2025 (17.x)

  • НЕОГРАНИЧЕННЫЙ

    Создает сеанс событий, который запускается неограниченное время, пока не будет остановлен с помощью инструкции ALTER EVENT SESSION ... STATE = STOP . Это значение по умолчанию, если MAX_DURATION оно не указано.

  • длительность времени СЕКУНДы | MINUTES | ЧАСЫ | Дни недели

    Создает сеанс событий, который останавливается автоматически после истечения указанного времени после запуска сеанса. Максимальная поддерживаемая длительность — 2 147 483 секунды, 35 792 минуты или 596 часов или 24 дня.

Дополнительные сведения см. в разделе "Сеансы событий с привязкой к времени".

Замечания

Дополнительные сведения о аргументах сеанса событий см. в разделе "Расширенные события".

Приоритеты выполнения логических операторов распределяются следующим образом: NOT (наивысший приоритет), AND, OR (низший приоритет).

Разрешения

Для SQL Server и Управляемого экземпляра SQL Azure требуются CREATE ANY EVENT SESSION (представленные в SQL Server 2022) или ALTER ANY EVENT SESSION разрешения.

Azure SQL Database и SQL Database в Microsoft Fabric требуют CREATE ANY DATABASE EVENT SESSION разрешения в базе данных.

Совет

SQL Server 2022 представила более детализированные разрешения для расширенных событий. Дополнительные сведения см. в блоге: новые детализированные разрешения для SQL Server 2022 и SQL Azure для улучшения соблюдения с помощью PoLP.

Примеры

А. Пример управляемого экземпляра SQL Server и Azure SQL

В следующем примере демонстрируется, как создать сеанс событий с именем test_session. В этом примере добавляются два события и используется целевой event_file объект, ограничивающий размер каждого файла до 256 МБ и ограничение сохраненного количества файлов до 10.

IF EXISTS (SELECT 1
           FROM sys.server_event_sessions
           WHERE name = 'test_session')
    DROP EVENT SESSION test_session ON SERVER;

CREATE EVENT SESSION test_session ON SERVER
ADD EVENT sqlserver.rpc_starting,
ADD EVENT sqlserver.sql_batch_starting,
ADD EVENT sqlserver.error_reported
ADD TARGET package0.event_file
    (
    SET filename = N'C:\xe\test_session.xel',
        max_file_size = 256,
        max_rollover_files = 10
    )
WITH (MAX_MEMORY = 4 MB);

В. Примеры базы данных SQL Azure

Например, пошаговое руководство по созданию сеанса событий с целевым объектом event_file в службе хранилища Azure и создание сеанса событий с целевым объектом ring_buffer в памяти.

Примеры кода могут отличаться для базы данных SQL Azure и управляемого экземпляра SQL

Некоторые примеры кода Transact-SQL, написанные для SQL Server, требуют небольших изменений для запуска в Базе данных SQL Azure или базе данных SQL в Fabric. Одна из категорий таких примеров кода включает представления каталога, префиксы имен которых отличаются в зависимости от типа ядра СУБД:

  • server_ - префикс для SQL Server и Управляемый экземпляр SQL Azure
  • database_ - префикс для базы данных SQL Azure, базы данных SQL в Fabric и Управляемом экземпляре SQL

База данных SQL Azure и база данных SQL в Fabric поддерживают только сеансы событий с областью действия базы данных. SQL Server Management Studio (SSMS) поддерживает сеансы событий с областью базы данных для Базы данных SQL Azure: узел расширенных событий , содержащий сеансы с областью базы данных, отображаются в каждой базе данных в обозревателе объектов.

Управляемый экземпляр SQL Azure поддерживает как сеансы уровня базы данных, так и сеансы уровня сервера. SSMS полностью поддерживает сеансы на уровне сервера для Управляемого экземпляра SQL: узел Расширенные события, содержащий все сеансы на уровне сервера, отображается в папке Управление для каждого управляемого экземпляра в обозревателе объектов.

Примечание.

Для Управляемого экземпляра SQL Azure рекомендуется использовать сеансы событий с областью действия сервера.

Сеансы событий с областью действия базы данных не отображаются в обозревателе объектов в SSMS для Управляемого экземпляра SQL Azure. В управляемом экземпляре SQL сеансы событий в области базы данных могут запрашиваться и управляться только с помощью Transact-SQL.

На рисунке в следующей таблице перечислены и сравниваются два подмножества представлений каталога. Подмножества имеют разные префиксы имен, так как поддерживают разные типы ядра СУБД.

Имя в SQL Server и Управляемый экземпляр SQL Azure Имя в Базе данных SQL Azure, базе данных SQL в Fabric и Управляемом экземпляре SQL Azure
sys.server_event_session_actions
sys.server_event_session_events
sys.server_event_session_fields
sys.server_event_session_targets
sys.server_event_sessions
sys.database_event_session_actions
sys.database_event_session_events
sys.database_event_session_fields
sys.database_event_session_targets
sys.database_event_sessions