Создание сеанса расширенных событий с помощью редактора запросов
Сеанс расширенных событий можно создать с помощью редактора запросов или в обозревателе объектов. В обозревателе объектов предусмотрена расширенная подсистема событий, включающая два пользовательских интерфейса, которые могут быть использованы для создания, изменения и просмотра данных сеанса события. К ним относится мастер, который служит для создания сеанса события, а также новый пользовательский интерфейс сеанса, который представляет более сложные параметры конфигурации. Сеанс расширенных событий можно создать для диагностики трассировок SQL Server, что дает возможность решать, например, следующие проблемы.
Находить наиболее ресурсоемкие запросы.
Находить основные причины конфликтов кратковременных блокировок.
Находить запросы, которые блокируют другие запросы.
Устранять неполадки чрезмерного использования ЦП, вызванные перекомпиляцией запросов.
Устранять неполадки взаимоблокировок.
Сведения о создании сеанса расширенных событий с помощью мастера создания сеанса см. в разделе создать сеанс расширенных событий с помощью пользовательского интерфейса нового сеанса (обозреватель объектов). Сведения о создании сеанса расширенных событий с помощью пользовательского интерфейса нового сеанса см. в разделе Создание сеанса расширенных событий в диалоговом окне «Создание сеанса».
Разрешения
Для создания сеанса расширенных событий требуется разрешение ALTER ANY EVENT SESSION.
Создание сеанса расширенных событий с помощью редактора запросов
Создание сеанса расширенных событий
Ниже показано, как создать сеанс расширенных событий с помощью редактора запросов в среде Среда SQL Server Management Studio.
Определите, какие события необходимо использовать в сеансе. Для просмотра всех доступных событий вместе с ключевым словом и каналом используйте следующий запрос:
Примечание Дополнительные сведения о ключевых словах и каналах см. в разделе Пакеты обработки расширенных событий SQL Server.
SELECT p.name, c.event, k.keyword, c.channel, c.description FROM ( SELECT event_package = o.package_guid, o.description, event=c.object_name, channel = v.map_value FROM sys.dm_xe_objects o LEFT JOIN sys.dm_xe_object_columns c ON o.name = c.object_name INNER JOIN sys.dm_xe_map_values v ON c.type_name = v.name AND c.column_value = cast(v.map_key AS nvarchar) WHERE object_type = 'event' AND (c.name = 'CHANNEL' or c.name IS NULL) ) c LEFT JOIN ( SELECT event_package = c.object_package_guid, event = c.object_name, keyword = v.map_value FROM sys.dm_xe_object_columns c INNER JOIN sys.dm_xe_map_values v ON c.type_name = v.name AND c.column_value = v.map_key AND c.type_package_guid = v.object_package_guid INNER JOIN sys.dm_xe_objects o ON o.name = c.object_name AND o.package_guid = c.object_package_guid WHERE object_type = 'event' AND c.name = 'KEYWORD' ) k ON k.event_package = c.event_package AND (k.event=c.event or k.event IS NULL) INNER JOIN sys.dm_xe_packages p ON p.guid = c.event_package ORDER BY keyword desc, channel, event
В окне создания запроса добавьте следующие инструкции для создания сеанса события, заменив session_name необходимым именем сеанса.
Важно! Шаги с 2 по 6 данной процедуры описывают каждый раздел определения сеанса событий. Перед исполнением необходимо добавить все инструкции в одно окно запроса. Полный пример запроса см. в подразделе «Пример» этого раздела.
CREATE EVENT SESSION session_name ON SERVER
Добавьте события, которые необходимо отслеживать, в формате package_name.event_name. Для каждого события добавьте строку следующего вида:
ADD EVENT package_name.event_name
Например.
ADD EVENT sqlserver.file_read_completed, ADD EVENT sqlserver.file_write_completed
(Необязательно) После добавления события можно добавить действия, подлежащие выполнению. Можно также добавить предикаты. Предикаты используются для установки условия, когда целевой объект должен получить сведения о событии. Действия добавляются с помощью предложения ACTION действия, а предикаты добавляются с помощью предложения WHERE. Например, чтобы добавить действие и предикат, в котором текст Transact-SQL записывается для события sqlserver.file_read_completed и идентификатор файла равен 1, следует включить следующий инструкцию:
ADD EVENT sqlserver.file_read_completed (ACTION (sqlserver.sql_text) WHERE file_id = 1),
Для просмотра доступных действий используйте следующий запрос:
SELECT p.name AS 'package_name', xo.name AS 'action_name', xo.description, xo.object_type FROM sys.dm_xe_objects AS xo JOIN sys.dm_xe_packages AS p ON xo.package_guid = p.guid WHERE xo.object_type = 'action' AND (xo.capabilities & 1 = 0 OR xo.capabilities IS NULL) ORDER BY p.name, xo.name
Чтобы просмотреть предикаты, доступные для события, выполните следующий запрос, заменив event_name именем события, для которого необходимо добавить предикат:
SELECT * FROM sys.dm_xe_object_columns WHERE object_name = 'event_name' AND column_type = 'data'
Например.
SELECT * FROM sys.dm_xe_object_columns WHERE object_name = 'file_read_completed' AND column_type = 'data'
Помните, что можно также добавить источники глобальных предикатов. Источник глобальных предикатов может быть использован в любом выражении предикатов. Для просмотра доступных источников глобальных предикатов используйте следующий запрос:
SELECT p.name AS package_name, xo.name AS predicate_name , xo.description, xo.object_type FROM sys.dm_xe_objects AS xo JOIN sys.dm_xe_packages AS p ON xo.package_guid = p.guid WHERE xo.object_type = 'pred_source' ORDER BY p.name, xo.name
Например, следующее выражение предиката можно использовать для указания, что данные должны быть собраны для события первые пять раз, когда происходит событие.
WHERE package0.counter <= 5
Добавьте нужный целевой объект, в котором данные события будут обработаны и использованы. Используйте следующий формат:
ADD TARGET package_name.target_name
В следующем примере добавляется асинхронный целевой объект файла.
ADD TARGET package0.asynchronous_file_target (SET filename = 'c:\temp\xelog.xel', metadatafile = 'c:\temp\xelog.xem')
Для просмотра списка доступных целей используйте следующий запрос:
SELECT p.name AS 'package_name', xo.name AS 'target_name' , xo.description, xo.object_type FROM sys.dm_xe_objects AS xo JOIN sys.dm_xe_packages AS p ON xo.package_guid = p.guid WHERE xo.object_type = 'target' AND (xo.capabilities & 1 = 0 OR xo.capabilities IS NULL) ORDER BY p.name, xo.name
Примечание Сведения о разных типах целевых объектов см. в разделе Цели расширенных событий SQL Server.
Просмотрите и добавьте любые дополнительные параметры конфигурации. Например, можно настроить параметры, такие как режим хранения событий, срок хранения событий в буфере или необходимость запуска сеанса событий автоматически при запуске SQL Server. Параметры описаны в разделе ALTER EVENT SESSION (Transact-SQL). Если эти параметры не заданы вручную, будут использоваться значения по умолчанию.
Запустите сеанс.
Примечание Дополнительные сведения о просмотре результатов сеанса см. в соответствующем разделе для типа целевого объекта на сайте Цели расширенных событий SQL Server электронной документации.
В примере ниже создается сеанс расширенных событий с именем IOActivity, который собирает следующие сведения.
Данные события для завершенных операций чтения файла, включая связанный текст Transact-SQL для операций чтения, в которых идентификатор файла равен 1.
Данные события для завершенных операций записи в файл.
Данные событий для данных, которые записаны из кэша журнала в физический файл журнала.
Сеанс отправляет результат в файл целевого объекта.
CREATE EVENT SESSION IOActivity
ON SERVER
ADD EVENT sqlserver.file_read_completed
(
ACTION (sqlserver.sql_text)
WHERE file_id = 1),
ADD EVENT sqlserver.file_write_completed,
ADD EVENT sqlserver.databases_log_flush
ADD TARGET package0.asynchronous_file_target
(SET filename = 'c:\temp\xelog.xel', metadatafile = 'c:\temp\xelog.xem')
См. также
Справочник
CREATE EVENT SESSION (Transact-SQL)