CREATE EVENT SESSION (Transact-SQL)
Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
Создает сеанс расширенных событий, который идентифицирует источник событий, цели и параметры сеанса событий.
Соглашения о синтаксисе 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 } ]
}
Примечание.
Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.
Аргументы
event_session_name
Определяемое пользователем имя для сеанса событий. event_session_name является буквенно-цифровым, может быть до 128 символов, должен быть уникальным в экземпляре SQL Server и должен соответствовать правилам идентификаторов.
ADD EVENT [ 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'.
number — любой числовой тип, включая decimal. Ограничения: недостаток доступной физической памяти или слишком большое число, которое невозможно представить 64-разрядным целым.
string — строка Юникод или ANSI, требуемая для предикатного сравнения. Для функций предикатного сравнения не выполняется неявное преобразование строкового типа. Передача неверного типа приводит к ошибке.
ADD TARGET [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] }
Задает параметр целевого объекта.
Чтобы просмотреть все целевые параметры и их описания, выполните следующий запрос, заменив target-name
заполнитель именем целевого объекта, например 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';
Важно!
Если вы используете целевой объект кольцевого буфера, рекомендуется задать MAX_MEMORY
целевой параметр (отличный от MAX_MEMORY
параметра сеанса) значение 1024 килобайт (КБ) или меньше, чтобы избежать возможного усечения данных выходных данных XML.
Дополнительные сведения о типах целевых объектов см. в разделе "Целевые объекты для расширенных событий" в SQL Server.
WITH ( <event_session_options> [ ,...n] )
Задает параметры для использования с сеансом событий.
MAX_MEMORY =size [ KB | MB ]
Задает максимальный объем памяти, выделенной в сеансе для буферов событий. Значение по умолчанию — 4 Мб. размер — целое значение, которое может указываться в килобайтах (Кб) или мегабайтах (Мб). Максимальная сумма не может превышать 2 ГБ (менее 2048 МБ). Однако использование значений памяти в диапазоне ГБ не рекомендуется.
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: потеря событий не разрешена. Этот параметр обеспечивает сохранение всех произошедших событий. При использовании этого параметра все задачи, которые инициируют события, должны ждать освобождения пространства в буфере событий. Использование NO_EVENT_LOSS может вызвать обнаруженные проблемы с производительностью во время активного сеанса событий. Соединения пользователя могут простаивать при ожидании событий, данные которых должны быть записаны на диск из буфера.
MAX_DISPATCH_LATENCY = { seconds SECONDS | INFINITE }
Задает промежуток времени, в течение которого события находятся в буферной памяти перед отправкой в цели сеанса событий. По умолчанию это значение равно 30 секундам.
seconds SECONDS — время ожидания в секундах перед началом выгрузки содержимого буферов в целевые объекты. seconds является целым числом. Минимальное значение задержки составляет 1 секунду. Чтобы задать неограниченную задержку (INFINITE), можно использовать значение 0.
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 создаются два буфера размера , а общая память, используемая для буферизации событий, MAX_MEMORY + 2 * MAX_EVENT_SIZE.
MEMORY_PARTITION_MODE = { NONE | PER_NODE | PER_CPU }
Задает место, в котором создаются буферы событий.
НЕТ Одного набора буферов создается в экземпляре SQL Server.
PER_NODE — Набор буферов, создаваемый для каждого узла NUMA.
PER_CPU — набор буферов, создаваемый для каждого ЦП.
TRACK_CAUSALITY = { ON | OFF }
Указывает, будут ли отслеживаться причинно-следственные связи. Если отслеживание включено, то причинность позволяет коррелировать связанные события в различных серверных соединениях.
STARTUP_STATE = { ON | OFF }
Указывает, следует ли автоматически запускать этот сеанс событий при запуске SQL Server.
Примечание.
Если STARTUP_STATE = ON
сеанс событий начнется только в том случае, если SQL Server остановлен, а затем перезапущен.
ON: сеанс событий запускается при начальном запуске.
Сеанс событий OFF не запускается при запуске.
Замечания
Приоритеты выполнения логических операторов распределяются следующим образом: NOT
(наивысший приоритет), AND
, OR
(низший приоритет).
Разрешения
Для SQL Server и управляемого экземпляра SQL требуется разрешение ALTER ANY EVENT SESSION
.
В Базе данных SQL требуется соответствующее разрешение ALTER ANY DATABASE EVENT SESSION
.
Примеры
Пример для SQL Server
В следующем примере демонстрируется, как создать сеанс событий с именем test_session
. В этом примере добавляются два события, а также используется цель средства отслеживания событий для Windows.
IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='test_session')
DROP EVENT session test_session ON SERVER;
GO
CREATE EVENT SESSION test_session
ON SERVER
ADD EVENT sqlos.async_io_requested,
ADD EVENT sqlserver.lock_acquired
ADD TARGET package0.etw_classic_sync_target
(SET default_etw_session_logfile_path = N'C:\demo\traces\sqletw.etl' )
WITH (MAX_MEMORY=4MB, MAX_EVENT_SIZE=4MB);
GO
Пример SQL Azure
В управляемом экземпляре SQL Azure или в базе данных SQL Azure сохраните файлы .xel в хранилище BLOB-объектов Azure. Вы можете использовать sys.fn_xe_file_target_read_file
для чтения из сеансов расширенных событий, которые создаются и сохраняются в хранилище BLOB-объектов Azure. В качеств примера пошагового руководства проверьте целевой код файла событий расширенных событий в базе данных SQL Azure и управляемом экземпляре SQL Azure.
Примеры кода могут отличаться для базы данных SQL Azure и управляемого экземпляра SQL
Некоторые примеры кода Transact-SQL, написанные для SQL Server, нуждаются в небольших изменениях для запуска в Azure. Одна из категорий таких примеров кода включает представления каталога, префиксы имен которых отличаются в зависимости от типа ядра СУБД:
server_
- префикс для SQL Server и Управляемый экземпляр SQL Azuredatabase_
- префикс для База данных SQL Azure и Управляемый экземпляр SQL
База данных SQL Azure поддерживает только сеансы событий область базы данных. SQL Server Management Studio (SSMS) полностью поддерживает сеансы событий область базы данных для База данных SQL Azure: узел расширенных событий, содержащий сеансы область базы данных, отображаются в каждой базе данных в обозреватель объектов.
Управляемый экземпляр SQL Azure поддерживает как сеансы уровня базы данных, так и сеансы уровня сервера. SSMS полностью поддерживает сеансы на уровне сервера для Управляемого экземпляра SQL: узел Расширенные события, содержащий все сеансы на уровне сервера, отображается в папке Управление для каждого управляемого экземпляра в обозревателе объектов.
Примечание.
Для управляемых экземпляров рекомендуется использовать сеансы на уровне сервера. Сеансы область базы данных не отображаются в обозреватель объектов в SSMS для Управляемый экземпляр SQL Azure. Сеансы с область базой данных можно запрашивать и управлять ими только с помощью Transact-SQL при использовании управляемого экземпляра.
На рисунке в следующей таблице перечислены и сравниваются два подмножества представлений каталога. Для краткости подмножества ограничены именами представлений, которые также содержат строку _event
. Подмножества имеют разные префиксы имен, так как поддерживают разные типы ядра СУБД.
Имя в SQL Server и Управляемый экземпляр SQL Azure | Имя в База данных SQL Azure и Управляемый экземпляр SQL Azure |
---|---|
server_event_notifications server_event_session_actions server_event_session_events server_event_session_fields server_event_session_targets server_event_sessions server_events server_trigger_events |
database_event_session_actions database_event_session_events database_event_session_fields database_event_session_targets database_event_sessions |
Два списка в предыдущей таблице были точными по состоянию на март 2022 года. Для актуального списка выполните следующую инструкцию Transact-SQL SELECT
:
SELECT name
FROM sys.all_objects
WHERE
(name LIKE 'database[_]%' OR
name LIKE 'server[_]%' )
AND name LIKE '%[_]event%'
AND type = 'V'
AND SCHEMA_NAME(schema_id) = 'sys'
ORDER BY name;
См. также
- sys.server_event_sessions (Transact-SQL)
- sys.dm_xe_objects (Transact-SQL)
- sys.dm_xe_object_columns (Transact-SQL)
Следующие шаги
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по