Использование Extended Events Докладчик: Тарас Бобровицкий Sr. DB Developer @ Wincor Nixdorf
Использование Extended Events Архитектура Основная терминология DDL и запросы к Extended Events Возможности UI
Знакомство с Extended Events Появились в SQL Server 2008 Заменяет SQL Trace/Profiler Больший список событий Работает на более низком уровне
Демонстрация Пример создания сеанса Extended Events в SSMS
Архитектура Компоненты Database Engine Extended Events Engine Memory Buffers Thread Pool
Архитектура – жизненный цикл Поток выполнения Событие возникло в коде Проверка включения нет да
Архитектура – жизненный цикл Установлены дополнительные колонки? Сбор данных по доп. колонкам да нет Сбор стандартных данных по событию
Архитектура – жизненный цикл Вычисление предикатов Fail Поток выполнения Успешно Выполнение Actions Отправка информации синхронным Target’ам Запись в буфер для асинхронных Target’ов
Терминология Package Event Action Predicate Type/Map Target
Package Контейнер для метаданных select * from sys.dm_xe_packages p where p.capabilities is null or p.capabilities & 1 = 0
Event Обьект метаданных описывающий событие select p.name package_name, o.name event_name, o.description from sys.dm_xe_objects o inner join sys.dm_xe_packages p on o.package_guid=p.guid where (p.capabilities is null or p.capabilities & 1 = 0) and (o.capabilities is null or o.capabilities & 1 = 0) and o.object_type=N'event'
Event Обьект метаданных описывающий событие
Event Использует категоризацию Event Tracing for Windows (ETW) – Каналы + Ключевые Слова Каналы Admin Analytic Debug Operational
Event Колонки select * from sys.dm_xe_object_columns c where c.object_name='sql_statement_completed' Колонки
Action Действие, которое выполняется синхронно с возникновением события select p.name package_name, o.name event_name, o.description from sys.dm_xe_objects o inner join sys.dm_xe_packages p on o.package_guid=p.guid where (p.capabilities is null or p.capabilities & 1 = 0) and (o.capabilities is null or o.capabilities & 1 = 0) o.object_type=N'action'
Action Действие, которое выполняется синхронно с возникновением события
Predicate Предикат, содержащий фильтрующее условие для событий В выражениях используют Data-колонки событий Pred_source обьекты пакета Синхронны
Predicate Pred_source обьекты select p.name package_name, o.name pred_source_name, o.description from sys.dm_xe_objects o inner join sys.dm_xe_packages p on o.package_guid=p.guid where (p.capabilities is null or p.capabilities & 1 = 0) and (o.capabilities is null or o.capabilities & 1 = 0) o.object_type=N'pred_source'
Predicate Pred_source обьекты
Predicate Функции сравнения select p.name package_name, o.name pred_source_name, o.description from sys.dm_xe_objects o inner join sys.dm_xe_packages p on o.package_guid=p.guid where (p.capabilities is null or p.capabilities & 1 = 0) and (o.capabilities is null or o.capabilities & 1 = 0) o.object_type=N'pred_compare'
Predicate Функции сравнения
Types/Maps select * from sys.dm_xe_objects o where o.object_type in (N'type',N'map')
Target Обьект, отвечающий за запись собраных данных
Target Синхронные Асинхронные Блок Скинуть событие Скинуть много событий
Event Session Сеанс сбора данных через XE
DDL и запросы к XE Создание сеанса Запуск/остановка сеанса Удаление сеанса Запросы с данным XE
Создание сеанса CREATE EVENT SESSION [test_session] ON SERVER ADD EVENT sqlserver.sp_statement_starting( ACTION(sqlserver.transaction_id)) ADD TARGET package0.event_file(SET filename=N'F:\SQLData\MSSQL11.MSSQLSERVER\MSSQL\Log\test_session.xel') WITH (STARTUP_STATE=OFF) GO
Запуск/остановка сеанса alter event session [test_session] on server State=start
Удаление сеанса drop event session [test_session] on server
Чтение собранных данных Ring Buffer select cast(t.target_data as xml) data from sys.dm_xe_session_targets t inner join sys.dm_xe_sessions s on t.event_session_address=s.address where s.name=N'test_session' and target_name='ring_buffer'
Чтение собранных данных Файл select cast(log.event_data as xml) from sys.fn_xe_file_target_read_file(N'F:\XE_Trace\test_session_0_130537083224190000.xel',NULL,NULL,NULL) log