Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к: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_actionssys.server_event_session_eventssys.server_event_session_fieldssys.server_event_session_targetssys.server_event_sessions |
sys.database_event_session_actionssys.database_event_session_eventssys.database_event_session_fieldssys.database_event_session_targetssys.database_event_sessions |
Связанный контент
- Создание сеанса событий с целевым объектом event_file в службе хранилища Azure
- Целевые объекты расширенных событий
- sys.server_event_sessions (Transact-SQL)
- sys.dm_xe_objects (Transact-SQL)
- sys.dm_xe_object_columns (Transact-SQL)
- ALTER EVENT SESSION (Transact-SQL)
- ОСТАНОВИТЬ СЕССИЮ СОБЫТИЙ (Transact-SQL)