ALTER EVENT SESSION (Transact-SQL)

Область применения: SQL Server Управляемый экземпляр SQL Azure

Запускает или останавливает сеанс событий или изменяет конфигурацию сеанса.

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

Синтаксис

ALTER EVENT SESSION event_session_name  
ON SERVER  
{  
    [ [ {  <add_drop_event> [ ,...n] }     
       | { <add_drop_event_target> [ ,...n ] } ]   
    [ WITH ( <event_session_options> [ ,...n ] ) ]  
    ]  
    | [ STATE = { START | STOP } ]  
}  
  
<add_drop_event>::=  
{  
    [ ADD EVENT <event_specifier>   
         [ ( {   
                 [ SET { event_customizable_attribute = <value> [ ,...n ] } ]  
                 [ ACTION ( { [event_module_guid].event_package_name.action_name [ ,...n ] } ) ]  
                 [ WHERE <predicate_expression> ]  
        } ) ]  
   ]   
   | DROP EVENT <event_specifier> }  
  
<event_specifier> ::=  
{  
[event_module_guid].event_package_name.event_name  
}  
  
<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'  
}  
  
<add_drop_event_target>::=  
{  
    ADD TARGET <event_target_specifier>  
        [ ( SET { target_parameter_name = <value> [ ,...n] } ) ]  
    | DROP TARGET <event_target_specifier>  
}  
  
<event_target_specifier>::=  
{  
    [event_module_guid].event_package_name.target_name  
}  
  
<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 } ]  
}  

Аргументы

Термин Определение
event_session_name Имя существующего сеанса событий.
STATE = START | ОСТАНОВКА Запускает или останавливает сеанс событий. Это аргумент действителен, только если к объекту сеанса событий применяется ALTER EVENT SESSION.
ADD EVENT <event_specifier> Связывает событие, определенное аргументом <event_specifier>, с сеансом событий.
[event_module_guid].event_package_name.event_name Имя события в пакете событий, где:

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

События отображаются в представлении sys.dm_xe_objects со значением object_type, равным "event".
SET { event_customizable_attribute= <value> [ ,...n] } Указывает настраиваемые атрибуты для события. Настраиваемые атрибуты отображаются в представлении sys.dm_xe_object_columns со значением column_type, равным "customizable", и object_name = event_name.
ACTION ( { [event_module_guid].event_package_name.action_name [ ,...n] } ) Действие, связанное с сеансом событий, где:

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

Действия отображаются в представлении sys.dm_xe_objects со значением object_type, равным "action".
WHERE <predicate_expression> Задает выражение предиката, используемое, чтобы определить необходимость обработки события. Если <predicate_expression> имеет значение true, то обработка события продолжается действиями и целевыми объектами сеанса. Если <predicate_expression> имеет значение false, для этого события не происходит действие и целевая обработка. Выражения предиката ограничены 3000 символами, ограничивающими строковые аргументы.
event_field_name Имя поля события, которое идентифицирует источник предиката.
[event_module_guid].event_package_name.predicate_source_name Имя глобального источника предиката, где:

- event_module_guid — идентификатор GUID для модуля, содержащего событие;
- event_package_name — пакет, который содержит объект предиката;
- predicate_source_name определен в представлении sys.dm_xe_objects как object_type со значением "pred_source".
[event_module_guid].event_package_name.predicate_compare_name Имя объекта предиката, связываемого с событием, где:

- event_module_guid — идентификатор GUID для модуля, содержащего событие;
- event_package_name — пакет, который содержит объект предиката;
- predicate_compare_name — глобальный источник, определенный в представлении sys.dm_xe_objects со значением object_type, равным "pred_compare".
DROP EVENT <event_specifier> Удаляет событие, обозначенное <event_specifier>. <event_specifier> должен быть допустимым в рамках сеанса события.
ADD TARGET <event_target_specifier> Связывает целевой объект, определенный аргументом <event_target_specifier>, с сеансом событий.
[event_module_guid].event_package_name.target_name Имя целевого объекта в сеансе событий, где:

- event_module_guid — идентификатор GUID для модуля, содержащего событие;
- event_package_name — пакет, который содержит объект действия;
- target_name представляет собой действие. Действия отображаются в представлении sys.dm_xe_objects как object_type со значением "target".
SET { target_parameter_name= <value> [, ...n] } Задает параметр целевого объекта. Параметры цели отображаются в представлении sys.dm_xe_object_columns со значением column_type, равным "customizable", и object_name = target_name.

Примечание. Если вы используете целевой объект кольцевого буфера, рекомендуется задать для целевого параметра max_memory значение 2048 килобайт (КБ), чтобы избежать возможного усечения данных выходных данных XML. Дополнительные сведения об использовании разных типов целевых объектов см. в статье Цели расширенных событий SQL Server.
DROP TARGET <event_target_specifier> Удаляет целевой объект, обозначенный <event_target_specifier>. <event_target_specifier> должен быть допустимым в рамках сеанса события.
EVENT_RETENTION_MODE = { ALLOW_SINGLE_EVENT_LOSS | ALLOW_MULTIPLE_EVENT_LOSS | NO_EVENT_LOSS } Задает режим хранения событий, используемый для обработки потери события.

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

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

NO_EVENT_LOSS
Потеря событий не разрешена. Этот параметр обеспечивает сохранение всех произошедших событий. При использовании этого параметра все задачи, которые инициируют события, должны ждать освобождения пространства в буфере событий. Это может привести к заметному снижению производительности во время активного сеанса событий. Соединения пользователя могут простаивать при ожидании событий, данные которых должны быть записаны на диск из буфера. Для целевых объектов файлов событий в База данных SQL Azure работает так же, как и ALLOW_SINGLE_EVENT_LOSS. Дополнительные сведения см. в EVENT_RETENTION_MODE.
MAX_DISPATCH_LATENCY = { seconds SECONDS | INFINITE } Задает промежуток времени, в течение которого события находятся в буферной памяти перед отправкой в цели сеанса событий. Минимальное значение задержки составляет 1 секунду. Чтобы задать неограниченную задержку (INFINITE), можно использовать значение 0. По умолчанию это значение равно 30 секундам.

seconds SECONDS
Время ожидания (в секундах) перед началом выгрузки содержимого буферов в цели. seconds является целым числом.

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

Примечание. MAX_DISPATCH_LATENCY = 0 SECONDS эквивалентно MAX_DISPATCH_LATENCY = INFINITE.
MAX_EVENT_SIZE =size [ KB | MB ] Задает максимальный допустимый размер для событий. MAX_EVENT_SIZE следует задать только для разрешения отдельных событий, превышающих MAX_MEMORY; Если задать значение меньше MAX_MEMORY возникает ошибка. size — целое значение, которое может быть представлено значением в килобайтах (КБ) или мегабайтах (МБ). Если значение size указано в килобайтах, то минимально допустимое значение — 64 KБ. Если задано значение MAX_EVENT_SIZE, то в дополнение к MAX_MEMORY создаются два буфера размером size. Это значит, что общий объем памяти, используемой для буферизации событий, составляет MAX_MEMORY + 2 * MAX_EVENT_SIZE.
MEMORY_PARTITION_MODE = { NONE | PER_NODE | PER_CPU } Задает место, в котором создаются буферы событий.

NONE
Один набор буферов создается в экземпляре SQL Server.

PER NODE — набор буферов создается в каждом узле NUMA.

PER CPU — набор буферов создается для каждого ЦП.
TRACK_CAUSALITY = { ON | OFF } Указывает, будут ли отслеживаться причинно-следственные связи. Если отслеживание включено, то причинность позволяет коррелировать связанные события в различных серверных соединениях.
STARTUP_STATE = { ON | OFF } Указывает, следует ли автоматически запускать этот сеанс событий при запуске SQL Server.

Если STARTUP_STATE=ON сеанс событий запускается только в том случае, если SQL Server остановлен, а затем перезапущен.

ON — сеанс событий запускается при начальном запуске.

OFF — сеанс событий не запускается при начальном запуске.

Замечания

Аргументы ADD и DROP аргументы нельзя использовать в той же инструкции.

Разрешения

Требуется разрешение ALTER ANY EVENT SESSION.

Совет

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

Примеры

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

-- Start the event session  
ALTER EVENT SESSION test_session ON SERVER  
STATE = start;  
GO  

-- Obtain live session statistics   
SELECT * FROM sys.dm_xe_sessions;  
SELECT * FROM sys.dm_xe_session_events;  
GO  
  
-- Add new events to the session  
ALTER EVENT SESSION test_session ON SERVER  
ADD EVENT sqlserver.database_transaction_begin,  
ADD EVENT sqlserver.database_transaction_end;  
GO  

См. также