Поделись сейчас:
Содержание скрывать
8. Практические варианты использования и примеры

1. Введение

1.1 Что такое SQL Server Расширенные события?

SQL Server Extended Events — это простая система мониторинга производительности, которая позволяет администраторам и разработчикам собирать и анализировать подробные данные об активности сервера. Эта система интегрирована в SQL Server Database Engine обеспечивает всестороннее понимание как обычных операций, так и сценариев устранения неполадок.

1.2 Зачем использовать расширенные события для мониторинга?

SQL Server Расширенные события предлагают несколько убедительных преимуществ для мониторинга базы данных и устранения неполадок:

  • Минимальное влияние на производительность благодаря облегченной архитектуре
  • Детальный контроль над сбором данных и фильтрацией событий
  • Настраиваемый сбор данных, соответствующий конкретным потребностям мониторинга
  • Возможность одновременного захвата событий из нескольких пакетов
  • Гибкие возможности фильтрации для фокусировки на соответствующих операциях
  • Поддержка мониторинга производственной системы без ухудшения пользовательского опыта
  • Комплексное отслеживание показателей производительности
  • Расширенные диагностические возможности для устранения неполадок.
  • Ведение контрольного журнала для соблюдения требований
  • Возможности анализа данных в реальном времени и исторических данных

1.3 Расширенные события против SQL Server Profiler

В то время как SQL Server Profiler Расширенные события MS SQL — это традиционный инструмент мониторинга, но он предлагает более эффективную альтернативу. Расширенные события потребляют меньше системных ресурсов и обеспечивают лучшую масштабируемость для производственных сред.

SQL Server Profiler теперь устарел, и Microsoft рекомендует перейти на расширенные события для всех действий по мониторингу.

2. Понимание архитектуры расширенных событий

2.1 Компоненты движка расширенных событий

Механизм расширенных событий состоит из нескольких основных компонентов, которые совместно обеспечивают сбор, обработку и хранение данных о событиях. Понимание этих компонентов поможет вам разрабатывать эффективные решения для мониторинга.

  • Диспетчер: Компонент «Диспетчер» координирует поток событий от источников к механизму расширенных событий. При возникновении события диспетчер получает уведомление и направляет его активным сеансам, подписанным на этот тип событий.
  • Буфер: Буферы временно хранят данные событий в памяти перед записью в целевые устройства. Этот механизм буферизации повышает производительность за счет сокращения операций ввода-вывода. Размер буфера и параметры управления можно настроить для баланса между использованием памяти и требованиями к сбору данных.
  • сессия: Сессия определяет область мониторинга событий. Она указывает, какие события следует фиксировать, какие действия выполнять, какие предикаты применять и где хранить результаты. Сессии можно создавать, изменять, запускать и останавливать независимо друг от друга.
  • Целевой экземпляр: Целевые объекты представляют собой места хранения захваченных данных событий. Каждая сессия может записывать данные в один или несколько целевых объектов, таких как файлы, кольцевые буферы или счетчики. Целевые объекты обрабатывают и сохраняют информацию о событиях для последующего анализа.

2.2 Пакеты мероприятий

SQL Server Расширенные события организуют функциональность в пакеты. Каждый пакет содержит связанные события, действия, типы, предикаты и цели. К распространенным пакетам относятся sqlserver, sqlos и package0.

  • Пакет sqlserver предоставляет специфичные для базы данных события, такие как запросы и транзакции.
  • Пакет sqlos содержит события операционной системы.
  • Пакет package0 предлагает функциональные возможности общего назначения, используемые во всех пакетах.

2.3 Типы событий и поля

События представляют собой события внутри SQL Server которые вы хотите отслеживать. Для каждого типа событий есть предопределённые поля, которые содержат необходимую информацию. Например, событие sql_statement_completed включает поля для длительности, процессорного времени, чтения и записи.

События могут быть синхронными или асинхронными. Синхронные события возникают во время самой операции, а асинхронные — после её завершения. Понимание характеристик событий помогает выбирать события, соответствующие вашим потребностям мониторинга.

2.4 Действия

Действия добавляют дополнительную информацию к захваченным событиям. Когда событие срабатывает, выполняются связанные с ним действия для сбора дополнительного контекста, такого как текст SQL-запроса, идентификатор сессии или информация о стеке вызовов.

К распространенным действиям относятся: sql_text для захвата запросов, database_name для идентификации базы данных и client_hostname для отслеживания сервера-источника. Действия предоставляют необходимый контекст для устранения неполадок и анализа.

2.5 целей

Целевые объекты определяют, как и где хранятся данные о событиях. SQL Server Расширенные события поддерживают несколько типов целей, в том числе:

  • event_file для хранения на диске, обеспечивая постоянное хранилище для подробного анализа
  • ring_buffer для хранения в памяти, предлагая быстрый доступ к последним событиям с минимальными накладными расходами
  • event_counter для простого подсчета
  • гистограмма для группировки
  • pair_matching для корреляции связанных событий

2.6 Предикаты (фильтры)

Предикаты фильтруют события на основе заданных условий, сокращая объём собираемых данных. Фильтрация возможна по имени базы данных, имени приложения, идентификатору сеанса, пороговым значениям длительности или любому значению поля события.

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

3. Расширенные состояния сеанса событий и жизненный цикл

3.1 Состояния сеанса: CREATE, ALTER и DROP

Расширенные сеансы событий проходят через различные состояния:

  • Оператор CREATE EVENT SESSION определяет новую сессию, но не запускает её. Сессия существует в остановленном состоянии до тех пор, пока не будет явно активирована.
  • Оператор ALTER EVENT SESSION изменяет конфигурацию сессии или переводит её состояние из остановленного в запущенное и обратно.
  • Оператор DROP EVENT SESSION полностью удаляет определение сеанса с сервера.

3.2 Содержание и характеристики сеанса

Каждая сессия содержит набор событий, действий, целей и предикатов. Сессии имеют подразумеваемые границы, определяющие их область действия и поведение. Параметры конфигурации управляют выделением памяти, сохранением событий и задержкой отправки.

Характеристики сессии включают в себя сохранение состояния после перезагрузки сервера, максимальный объем выделяемой памяти и способ обработки нехватки памяти. Эти параметры существенно влияют на поведение сессии и потребление ресурсов.

3.3 Границы сеанса и пакеты

Границы сессий определяют взаимосвязи между событиями, целями и пакетами. События из одного пакета могут запускать действия из другого пакета, обеспечивая гибкость в стратегиях сбора данных.

Связи пакетов позволяют объединять события из нескольких источников в рамках одного сеанса. Эта возможность позволяет создавать комплексные сценарии мониторинга, охватывающие различные SQL Server подсистемы.

4. Создание расширенных сеансов событий с помощью SSMS

4.1 Предварительные условия и настройка

Перед созданием SQL Server Для сеансов расширенных событий убедитесь, что у вас есть соответствующие разрешения. Для сеансов в области сервера требуется разрешение ALTER ANY EVENT SESSION, а для сеансов в области базы данных — разрешение CONTROL.

Подтвердите это SQL Server Management Studio установлен и подключен к целевому экземпляру. Ознакомьтесь с требованиями к мониторингу и определите, какие события и цели лучше всего соответствуют вашим потребностям.

4.2 Доступ к расширенным событиям в обозревателе объектов

Чтобы получить доступ к интерфейсу расширенных событий в SSMS, выполните следующие действия.

  1. Открыто SQL Server Management Studio и подключитесь к своему SQL Server пример.
  2. В обозревателе объектов разверните Управление и менеджмент -> Расширенные события.
  3. Узел расширенных событий содержит Сессии и Packages папки для управления конфигурациями мониторинга.

Доступ к интерфейсу расширенных событий в SQL Server Студия управления.

4.3 Создать новый сеанс

Чтобы создать новый сеанс:

    1. Щелкните правой кнопкой мыши по значку Сессии папку под Расширенные события.
    2. Выбрать Новая сессия Чтобы открыть диалоговое окно конфигурации, выполните следующие действия. В следующем материале этот метод будет использоваться для создания нового сеанса.

Создать новый сеанс расширенных событий в SQL Server Студия управления.

Примечание: Мастер создания нового сеанса также доступен для более организованного опыта.

4.3.1 Общая конфигурация страницы

На Общие настройте основные свойства сеанса:

  1. Введите имя сеанса в Название сессии Поле. Используйте описательные имена, указывающие на цель мониторинга.
  2. При желании выберите Запуск сессии событий при запуске сервера. для включения автоматической активации сеанса.
  3. Шаблон сеанса по умолчанию: Blank. Вы можете использовать другие шаблоны, если используете предопределенную конфигурацию.

Общая страница сеанса расширенных событий в SQL Server Студия управления.

4.3.2 Настройка страницы событий

Мероприятия страница позволяет вам выбрать, какие события отслеживать:

  1. Выберите Мероприятия страница слева Выберите страницу панели.
  2. В Библиотека мероприятий, просмотрите доступные мероприятия или воспользуйтесь функцией поиска.
  3. Фильтруйте события, вводя ключевые слова, например «sql_statement_completed», чтобы найти соответствующие события.
  4. Выберите нужное событие, например, sql_statement_completed.
  5. Нажмите кнопку со стрелкой вправо, чтобы переместить событие в Выбранные события .

Страница событий сеанса расширенных событий в SQL Server Студия управления.

4.3.3 Конфигурация хранилища данных

Хранение данных страница определяет, где хранятся данные о событиях:

  1. Выберите Хранение данных страница слева Выберите страницу панели.
  2. В Цели в области выберите тип цели из выпадающего списка.

Страница хранения данных сеанса расширенных событий в SQL Server Студия управления.

(1) event_file Цель

Целевой объект event_file сохраняет данные в файлы на диске с расширением .xel:

  1. Выбрать файл_события из выпадающего списка типа цели.
  2. Укажите путь к файлу, например, C:\temp\YourSession_Target.xel.
  3. Настройте параметры переноса для управления дисковым пространством, установив максимальный размер файла и количество файлов.
  4. Целевое устройство непрерывно записывает события до тех пор, пока сессия не завершится или не будут достигнуты пределы объема хранилища.

В SSMS установите целевой объект сессии в значение event_file.

(2) кольцевой буфер Целевой

Целевой объект ring_buffer хранит события в памяти для быстрого доступа без операций ввода-вывода с диска:

  1. Выбрать кольцевой буфер в качестве целевого типа.
  2. Настройте максимальный объем памяти, выделяемый буферу.
  3. Следует помнить, что при заполнении буфера старые события удаляются, что делает этот метод подходящим для мониторинга недавней активности.

Установите целевой параметр ring_buffer для сессии расширенных событий в SQL Server Студия управления.

(3) event_counter Target

Цель event_counter просто подсчитывает количество событий, не сохраняя подробные данные. Это обеспечивает минимальные накладные расходы, когда вам нужна только информация о частоте событий.

Установите целевое значение event_counter для сессии расширенных событий в SQL Server Студия управления.

(4) гистограмма Целевая

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

Установите целевой параметр «Гистограмма» для сеанса расширенных событий. SQL Server Студия управления.

(5) парное сопоставление Целевой

Цель pair_matching сопоставляет связанные события, такие как получение и снятие блокировки. Это позволяет анализировать парные операции и их временные взаимосвязи.

В SSMS установите целевой параметр сессии на pair_matching.

4.3.4 Расширенные настройки

Фильтр страница предоставляет параметры конфигурации на уровне сеанса:

  1. Выберите Фильтр страница слева Выберите страницу панели.
  2. Настроить Режим сохранения событий для управления обработкой событий в условиях нехватки памяти.
  3. Поставьте Максимальная задержка отправки для достижения баланса между обработкой в ​​реальном времени и производительностью системы.
  4. Настроить Максимальный размер памяти и Максимальный размер события на основе ваших требований к мониторингу.
  5. Выбрать Режим раздела памяти для оптимизации для сред с одним или несколькими процессорами.

Расширенная страница сеанса в SQL Server Студия управления.

4.4 Настройка фильтров событий (предикатов)

Предикаты сокращают объём данных, фильтруя события по определённым критериям. Чтобы настроить фильтры:

  1. На Мероприятия выберите событие, которое вы хотите отфильтровать, например «sql_statement_completed».
  2. Нажмите Настроить чтобы открыть диалоговое окно конфигурации события.
    Настройте событие сеанса расширенных событий в SQL Server Студия управления.
  3. Выберите Фильтр (предикат) меню.
  4. В Поиск В раскрывающемся списке выберите поле для фильтрации, например, длительность.
  5. Выберите оператор, например, «>».
  6. Введите фильтр Значение, например 1000000 (1 секунда).
  7. При необходимости добавьте дополнительные условия.

Настройте фильтры (предикаты) для события.

4.5 Выбор действий и полей событий

Для каждого события вы можете выбрать данные, которые будут собираться:

  1. На Мероприятия выберите событие, для которого вы хотите выбрать данные, например «sql_statement_completed».
  2. Нажмите Настроить чтобы открыть диалоговое окно конфигурации события.
  3. Выберите Глобальные поля (действия) меню.
  4. Выберите действия для добавления дополнительной информации, например, имени базы данных или имени клиентского приложения.
    Настройте действия события.
  5. Обзор Поля событий раздел, чтобы увидеть, какие поля автоматически регистрируются.
  6. Очистите все ненужные поля, чтобы уменьшить объем данных.
    Настройте поля события.

4.6 Начало и управление сессиями

После настройки сессии вы можете запустить её и отслеживать её работу:

  1. Нажмите OK для создания сеанса.
  2. В обозревателе объектов разверните Сессии папку, чтобы увидеть ваш новый сеанс.
  3. Щелкните правой кнопкой мыши имя сеанса и выберите Начать сессию чтобы начать фиксировать события.
    Запустите сессию расширенных событий в SQL Server Студия управления.
  4. Чтобы просмотреть данные в реальном времени, щелкните правой кнопкой мыши сеанс и выберите Смотрите данные в реальном времени.
    Смотрите данные в реальном времени сеанса расширенных событий в SQL Server Студия управления.
  5. Остановите сеанс, щелкнув правой кнопкой мыши и выбрав Остановить сеанс.

5. Создание расширенных сеансов событий с использованием T-SQL

5.1 Синтаксис создания сеанса событий

Создание расширенных сеансов событий с помощью T-SQL обеспечивает точный контроль и позволяет создавать скрипты для автоматического развертывания. Оператор CREATE EVENT SESSION имеет определённую синтаксическую структуру.

Базовый синтаксис включает имя сессии, предложения ADD EVENT для каждого события, предложения ADD TARGET для мест хранения и необязательные предложения WITH для настройки сессии.

5.2 Создание базового сеанса событий

Базовая сессия отслеживает определенные события и записывает результаты в целевой объект. Вот как можно создать основные компоненты.

5.2.1 Определение имени и параметров сеанса

Для начала создайте сессию, дав ей описательное имя:

CREATE EVENT SESSION [SampleSession] ON SERVER

Предложение ON SERVER создаёт сеанс в области сервера, который сохраняется при изменении базы данных. Для базы данных SQL Azure используйте предложение ON DATABASE для сеансов в области базы данных.

5.2.2 Добавление событий с помощью ADD EVENT

Добавьте события для регистрации с помощью предложения ADD EVENT:

CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed

Это позволяет захватить все выполненные SQL-операторы. Вы можете добавить несколько событий, используя дополнительные предложения ADD EVENT.

5.2.3 Настройка действий событий

Действия собирают дополнительный контекст для каждого события. Добавьте действия в скобках после имени события:

CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(sqlserver.sql_text, sqlserver.database_name, sqlserver.username)
)

В этом примере фиксируется текст SQL, имя базы данных и имя пользователя для каждого выполненного оператора.

5.2.4 Установка предикатов событий (предложение WHERE)

Предикаты фильтруют события для сокращения объёма данных. Используйте предложение WHERE в определении события:

CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(sqlserver.sql_text)
    WHERE ([package0].[greater_than_uint64]([duration],(5000000)))
)

Фильтрация выполняется по операторам длительностью более 5 секунд (5 000 000 микросекунд).

5.3 Добавление целевых объектов событий

Целевые объекты определяют, где хранятся данные о событиях и как они обрабатываются.

5.3.1 Синтаксис ДОБАВЛЕНИЯ ЦЕЛИ

Добавьте целевые объекты, используя предложение ADD TARGET после определения всех событий:

ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\SampleSession.xel'
)

Префикс package0 указывает, что целевой объект относится к базовому пакету.

5.3.2 Настройка параметров целевого объекта

Каждый тип целевого объекта принимает определенные параметры. Для параметра event_file настройте имя файла, максимальный размер файла и максимальный размер файлов для перемотки вперед:

ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\SampleSession.xel',
        max_file_size=(50),
        max_rollover_files=(5)
)

Такая конфигурация создает файлы размером до 50 МБ каждый, сохраняя до 5 файлов при переносе.

5.4 Параметры и настройки сеанса

Предложение WITH настраивает параметры уровня сеанса, которые управляют поведением и использованием ресурсов.

5.4.1 MAX_MEMORY и EVENT_RETENTION_MODE

Управление распределением памяти и обработкой событий в условиях давления:

WITH (
    MAX_MEMORY=4096 KB,
    EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS
)

Параметры EVENT_RETENTION_MODE включают ALLOW_SINGLE_EVENT_LOSS для минимального использования памяти, ALLOW_MULTIPLE_EVENT_LOSS для умеренных накладных расходов и NO_EVENT_LOSS для полного сохранения данных за счет потенциального снижения производительности.

5.4.2 MAX_DISPATCH_LATENCY

Установите максимальное время, в течение которого события могут оставаться в буферах, прежде чем будут записаны в целевые объекты:

WITH (
    MAX_DISPATCH_LATENCY=30 SECONDS
)

Более низкие значения обеспечивают больше данных в режиме реального времени за счет увеличения количества операций ввода-вывода.

5.4.3 РЕЖИМ_РАЗДЕЛА_ПАМЯТИ

Оптимизируйте разбиение памяти под конфигурацию вашего оборудования:

WITH (
    MEMORY_PARTITION_MODE=PER_CPU
)

Возможные варианты: NONE для одного раздела, PER_NODE для систем NUMA и PER_CPU для максимального параллелизма в многопроцессорных системах.

5.5 Начало, остановка и изменение сеансов

Управление состоянием сеанса и его конфигурацией осуществляется с помощью операторов ALTER EVENT SESSION.

5.5.1 ALTER EVENT SESSION для запуска/остановки

Начать сессию после создания:

ALTER EVENT SESSION [SampleSession] ON SERVER STATE = START;

Остановка текущего сеанса:

ALTER EVENT SESSION [SampleSession] ON SERVER STATE = STOP;

5.5.2 Изменение существующих сеансов

Изменить конфигурацию сеанса во время остановки. Добавить события:

ALTER EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_batch_completed;

Удалить события:

ALTER EVENT SESSION [SampleSession] ON SERVER
DROP EVENT sqlserver.sql_statement_completed;

5.5.3 Удаление сеансов событий

Полностью удалите сеанс с помощью DROP EVENT SESSION:

DROP EVENT SESSION [SampleSession] ON SERVER;

Перед сбросом сеанс необходимо остановить.

6. Детальная работа с целевыми объектами событий

6.1 event_file Целевая конфигурация

Целевой объект event_file обеспечивает постоянное хранение данных событий с гибкими параметрами конфигурации.

6.1.1 Путь к файлу и соглашения об именовании

Укажите полный путь и имя файла событий:

ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\MySession.xel'
)

Используйте расширение .xel для файлов журнала расширенных событий. Убедитесь, что SQL Server Учетная запись службы имеет разрешения на запись в указанный каталог.

6.1.2 Перенос файлов и управление размером

Настройте автоматическое переключение файлов для управления дисковым пространством:

ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\MySession.xel',
        max_file_size=(50),
        max_rollover_files=(10)
)

Когда файл достигает 50 МБ, SQL Server Функция Extended Events создаёт новый файл с увеличенным суффиксом. При достижении 10 файлов самый старый файл перезаписывается.

6.1.3 Чтение данных файла событий

Запрос данных из файла событий с помощью функции sys.fn_xe_file_target_read_file:

SELECT
    event_data,
    file_name,
    file_offset
FROM sys.fn_xe_file_target_read_file(
    'C:\XEvents\MySession*.xel',
    NULL, NULL, NULL
);

Подстановочный шаблон считывает все файлы, связанные с сеансом.

6.2 Использование целевого объекта кольцевого буфера

Целевой объект ring_buffer хранит события в памяти для быстрого доступа к последней активности.

6.2.1 Хранение событий в памяти

Настройте ring_buffer для хранения в памяти:

ADD TARGET package0.ring_buffer

События остаются доступными только пока сеанс активен и SQL Server Работает. Данные теряются при завершении сессии или перезапуске сервера.

6.2.2 Размер и конфигурация буфера

Управление распределением памяти для кольцевого буфера:

ADD TARGET package0.ring_buffer(
    SET max_memory=(4096)
)

Укажите объём памяти в килобайтах. При заполнении буфера старые события удаляются по принципу FIFO.

6.2.3 Запрос данных кольцевого буфера

Доступ к данным кольцевого буфера через DMV:

SELECT
    CAST(target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
    ON s.address = t.event_session_address
WHERE s.name = 'YourSessionName'
    AND t.target_name = 'ring_buffer';

Параметр target_data содержит информацию о событиях в формате XML.

6.3 event_counter Target

Цель event_counter обеспечивает простой подсчет без необходимости подробного хранения данных:

ADD TARGET package0.event_counter

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

6.4 Целевая гистограмма

Целевая гистограмма группирует события по значениям полей:

ADD TARGET package0.histogram(
    SET filtering_event_name=N'sqlserver.sql_statement_completed',
        source_type=0,
        source=N'database_name'
)

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

6.5 Целевое сопоставление пар

Цель pair_matching сопоставляет связанные события, такие как получение и снятие блокировок:

ADD TARGET package0.pair_matching(
    SET begin_event=N'sqlserver.lock_acquired',
        end_event=N'sqlserver.lock_released',
        begin_matching_columns=N'resource_type',
        end_matching_columns=N'resource_type'
)

Это позволяет анализировать парные операции и их длительность.

7. Просмотр и анализ данных расширенных событий

7.1 Использование SSMS для просмотра данных в реальном времени

SQL Server Management Studio предоставляет графический интерфейс для просмотра данных расширенных событий в режиме реального времени:

  1. В обозревателе объектов разверните Управление и менеджмент -> Расширенные события -> Сессии.
  2. Щелкните правой кнопкой мыши по активному сеансу.
  3. Выбрать Смотрите данные в реальном времени чтобы открыть средство просмотра данных в реальном времени.
    Смотрите данные в реальном времени сеанса расширенных событий в SQL Server Студия управления.
  4. События появляются в сетке по мере их возникновения.
  5. Щелкните отдельные события, чтобы просмотреть подробные значения полей на панели сведений.
    Следите за оперативными данными о событиях, включая подробности событий.
  6. Используйте фильтры панели инструментов, чтобы сосредоточиться на определенных типах событий или значениях полей.

7.2 Запрос данных файла событий с помощью T-SQL

Запросы T-SQL обеспечивают гибкий анализ собранных данных о событиях.

7.2.1 Функция sys.fn_xe_file_target_read_file

Прочитайте данные файла событий с помощью этой системной функции:

SELECT
    object_name AS EventName,
    CAST(event_data AS XML) AS EventData,
    file_name,
    file_offset,
    timestamp_utc
FROM sys.fn_xe_file_target_read_file(
    'C:\XEvents\MySession*.xel',
    NULL, NULL, NULL
);

Функция возвращает одну строку для каждого события с подробностями в формате XML.

7.2.2 Анализ XML-данных событий

Извлеките конкретные значения из XML-данных событий:

SELECT
    event_data.value('(event/@name)[1]', 'VARCHAR(50)') AS EventName,
    event_data.value('(event/@timestamp)[1]', 'DATETIME2') AS Timestamp,
    event_data.value('(event/data[@name="duration"]/value)[1]', 'BIGINT') AS Duration,
    event_data.value('(event/data[@name="statement"]/value)[1]', 'VARCHAR(MAX)') AS Statement
FROM (
    SELECT CAST(event_data AS XML) AS event_data
    FROM sys.fn_xe_file_target_read_file(
        'C:\XEvents\MySession*.xel',
        NULL, NULL, NULL
    )
) AS EventData;

Выражения XQuery извлекают отдельные значения полей из структуры XML.

7.2.3 Преобразование данных событий в таблицы

Создайте структурированные наборы результатов из данных событий:

WITH EventData AS (
    SELECT CAST(event_data AS XML) AS EventXML
    FROM sys.fn_xe_file_target_read_file(
        'C:\XEvents\MySession*.xel',
        NULL, NULL, NULL
    )
)
SELECT
    EventXML.value('(event/@name)[1]', 'VARCHAR(100)') AS EventName,
    EventXML.value('(event/data[@name="cpu_time"]/value)[1]', 'BIGINT') AS CPUTime,
    EventXML.value('(event/data[@name="physical_reads"]/value)[1]', 'BIGINT') AS PhysicalReads,
    EventXML.value('(event/action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText,
    EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName
FROM EventData;

7.3 Запрос данных кольцевого буфера

Извлечение данных из целевых объектов ring_buffer:

SELECT
    n.value('(@name)[1]', 'VARCHAR(50)') AS EventName,
    n.value('(@timestamp)[1]', 'DATETIME2') AS Timestamp,
    n.value('(data[@name="duration"]/value)[1]', 'BIGINT') AS Duration,
    n.value('(action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText
FROM (
    SELECT CAST(target_data AS XML) AS TargetData
    FROM sys.dm_xe_session_targets AS t
    JOIN sys.dm_xe_sessions AS s
        ON s.address = t.event_session_address
    WHERE s.name = 'YourSessionName'
        AND t.target_name = 'ring_buffer'
) AS Data
CROSS APPLY TargetData.nodes('//event') AS q(n);

7.4 Системные представления для расширенных событий

SQL Server предоставляет несколько DMV и представлений каталога для управления и мониторинга сеансов расширенных событий.

7.4.1 sys.server_event_sessions

Просмотр определений сеансов, сохраненных на сервере:

SELECT
    name,
    event_retention_mode_desc,
    max_dispatch_latency,
    max_memory,
    max_event_size,
    memory_partition_mode_desc
FROM sys.server_event_sessions;

В этом представлении каталога отображаются сведения о конфигурации всех определенных сеансов.

7.4.2 sys.dm_xe_sessions

Просмотреть текущие активные сеансы:

SELECT
    name,
    create_time,
    total_regular_buffers,
    regular_buffer_size,
    total_large_buffers,
    large_buffer_size
FROM sys.dm_xe_sessions;

Это DMV предоставляет информацию о времени выполнения активных сеансов расширенных событий.

7.4.3 sys.dm_xe_session_targets

Просмотр целевых объектов, связанных с активными сессиями:

SELECT
    s.name AS SessionName,
    t.target_name,
    t.execution_count,
    t.execution_duration_ms
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
    ON s.address = t.event_session_address;

7.4.4 Другие полезные DMV

Дополнительные представления предоставляют исчерпывающую информацию о сеансе:

  • sys.dm_xe_session_events: список событий в активных сеансах
  • sys.dm_xe_session_event_actions: показывает действия, настроенные для событий сеанса.
  • sys.dm_xe_objects: Каталогизирует все доступные события, действия и цели.
  • sys.dm_xe_object_columns: Поля сведений, доступные для каждого типа события
  • sys.dm_xe_packages: список всех пакетов расширенных событий

8. Практические варианты использования и примеры

8.1 Мониторинг выполнения операторов SQL

Отслеживание выполнения операторов SQL дает представление о шаблонах запросов и характеристиках производительности.

8.1.1 Отслеживание событий sql_statement_completed

Создайте сеанс для мониторинга выполненных SQL-операторов:

CREATE EVENT SESSION [QueryMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(
        sqlserver.sql_text,
        sqlserver.database_name,
        sqlserver.client_hostname,
        sqlserver.username
    )
)
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\QueryMonitoring.xel',
        max_file_size=(100),
        max_rollover_files=(5)
)
WITH (
    MAX_MEMORY=4096 KB,
    EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
    MAX_DISPATCH_LATENCY=30 SECONDS,
    STARTUP_STATE=OFF
);

ALTER EVENT SESSION [QueryMonitoring] ON SERVER STATE = START;

8.1.2 Фильтрация по базе данных или приложению

Сосредоточьтесь на конкретных базах данных или приложениях, использующих предикаты:

CREATE EVENT SESSION [AppSpecificMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(sqlserver.sql_text, sqlserver.client_app_name)
    WHERE (
        [sqlserver].[database_name] = N'YourDatabase'
        AND [sqlserver].[client_app_name] LIKE N'YourApplication%'
    )
)
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\AppMonitoring.xel'
);

8.2 Сбор информации о взаимоблокировках

Анализ взаимоблокировок требует сбора подробной информации о конфликтующих транзакциях.

8.2.1 Событие xml_deadlock_report

Создайте сеанс для захвата полных графиков взаимоблокировок:

CREATE EVENT SESSION [DeadlockMonitoring] ON SERVER
ADD EVENT sqlserver.xml_deadlock_report(
    ACTION(
        sqlserver.database_name,
        sqlserver.sql_text
    )
)
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\Deadlocks.xel'
)
WITH (STARTUP_STATE=ON);

ALTER EVENT SESSION [DeadlockMonitoring] ON SERVER STATE = START;

8.2.2 Анализ графиков взаимоблокировок

Извлечение и анализ информации о взаимоблокировках:

SELECT
    EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS DeadlockTime,
    EventXML.query('.') AS DeadlockGraph
FROM (
    SELECT CAST(event_data AS XML) AS EventXML
    FROM sys.fn_xe_file_target_read_file(
        'C:\XEvents\Deadlocks*.xel',
        NULL, NULL, NULL
    )
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'xml_deadlock_report';

Граф взаимоблокировок содержит подробную информацию о процессах, ресурсах и выборе жертв.

8.3 Отслеживание проблем производительности запросов

Определите неэффективные запросы с помощью показателей длительности и потребления ресурсов.

8.3.1 Обнаружение длительных запросов

Захват запросов, превышающих определенные пороговые значения длительности:

CREATE EVENT SESSION [LongRunningQueries] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(
        sqlserver.sql_text,
        sqlserver.database_name,
        sqlserver.plan_handle
    )
    WHERE ([duration] > 5000000)  -- 5 seconds in microseconds
)
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\LongQueries.xel'
);

8.3.2 Анализ плана выполнения

Собирайте планы запросов для анализа производительности:

CREATE EVENT SESSION [QueryPlans] ON SERVER
ADD EVENT sqlserver.query_post_execution_showplan(
    ACTION(
        sqlserver.sql_text,
        sqlserver.database_name
    )
    WHERE ([duration] > 10000000)  -- 10 seconds
)
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\QueryPlans.xel',
    max_file_size=(200)
);

8.4 Мониторинг событий входа в систему и безопасности

Отслеживание действий по аутентификации и авторизации для аудита безопасности.

8.4.1 Отслеживание успешных и неудачных входов в систему

Отслеживайте как успешные, так и неудачные попытки входа в систему:

CREATE EVENT SESSION [LoginMonitoring] ON SERVER
ADD EVENT sqlserver.login(
    ACTION(
        sqlserver.client_hostname,
        sqlserver.client_app_name
    )
),
ADD EVENT sqlserver.login_failed(
    ACTION(
        sqlserver.client_hostname
    )
)
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\Logins.xel'
)
WITH (STARTUP_STATE=ON);

8.4.2 Изменения разрешений

Отслеживание изменений разрешений безопасности:

CREATE EVENT SESSION [SecurityChanges] ON SERVER
ADD EVENT sqlserver.server_principal_management_event,
ADD EVENT sqlserver.database_principal_management_event,
ADD EVENT sqlserver.database_permission_change_event
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\SecurityAudit.xel'
);

8.5 Мониторинг на уровне базы данных

Мониторинг операций, связанных с базой данных, и изменений ее состояния.

8.5.1 События резервного копирования и восстановления

Отслеживайте операции резервного копирования и восстановления:

CREATE EVENT SESSION [BackupMonitoring] ON SERVER
ADD EVENT sqlserver.backup_restore_progress_trace,
ADD EVENT sqlserver.databases_backup_restore_event
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\BackupRestore.xel'
);

8.5.2 Изменения состояния базы данных

Мониторинг переходов состояний базы данных:

CREATE EVENT SESSION [DatabaseStateChanges] ON SERVER
ADD EVENT sqlserver.database_started,
ADD EVENT sqlserver.database_stopped
ADD TARGET package0.ring_buffer;

8.6 Обнаружение повреждений и проблем целостности базы данных

SQL Server Расширенные события предоставляют возможности раннего оповещения для обнаружения потенциального повреждения базы данных, что позволяет осуществлять упреждающее вмешательство до того, как проблемы перерастут в серьезные.

8.6.1 Ключевые события для обнаружения коррупции

Несколько событий сигнализируют о потенциальном повреждении или проблемах ввода-вывода.

8.6.1.1 Событие error_reported для критических ошибок

Событие error_reported фиксирует все SQL Server ошибки, включая номера ошибок, связанных с коррупцией:

ADD EVENT sqlserver.error_reported(
    WHERE (
        [severity] >= (20)
        OR [error_number] IN (823, 824, 825, 832, 855, 856)
    )
)

Ошибка 823 указывает на ошибки ввода-вывода, 824 сигнализирует об ошибках логической целостности, а 825 сообщает об успешных попытках чтения, которые могут указывать на проблемы с оборудованием.

8.6.1.2 Событие database_suspect_data_page

Это событие срабатывает, когда SQL Server обнаруживает подозрительную страницу:

ADD EVENT sqlserver.database_suspect_data_page

Подозрительные страницы указывают на потенциальное повреждение и записываются в таблицу msdb.dbo.suspect_pages.

8.6.1.3 Событие errorlog_writing

Захват записей, записанных в SQL Server журнал ошибок:

ADD EVENT sqlserver.errorlog_written(
    WHERE ([severity] >= (16))
)

8.6.2 Создание сеанса мониторинга коррупции

Организовать комплексную сессию по выявлению и мониторингу коррупции.

8.6.2.1 Фильтрация номеров ошибок повреждения (823, 824, 825)

Создайте целевую сессию, посвященную показателям коррупции:

CREATE EVENT SESSION [CorruptionDetection] ON SERVER
ADD EVENT sqlserver.error_reported(
    ACTION(
        sqlserver.database_name,
        sqlserver.sql_text
    )
    WHERE (
        [error_number] IN (823, 824, 825, 832, 855, 856)
        OR [severity] >= (20)
    )
),
ADD EVENT sqlserver.database_suspect_data_page(
    ACTION(
        sqlserver.database_name
    )
)
8.6.2.2 Установка соответствующих уровней серьезности

Включите серьезные ошибки, которые могут указывать на коррупцию:

WHERE (
    [severity] >= (20)
    OR [error_number] IN (823, 824, 825)
)

Уровень серьезности 20 и выше указывает на проблемы системного уровня, которые часто связаны с коррупцией.

8.6.2.3 Настройка целевого файла событий для оповещений

Сохранение событий коррупции для анализа и оповещения:

ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\CorruptionMonitoring.xel',
        max_file_size=(50),
        max_rollover_files=(10)
)
WITH (
    STARTUP_STATE=ON,
    MAX_DISPATCH_LATENCY=5 SECONDS
);

ALTER EVENT SESSION [CorruptionDetection] ON SERVER STATE = START;

8.6.3 Анализ данных о событиях коррупции

Извлекайте и интерпретируйте события, связанные с коррупцией, из полученных данных.

8.6.3.1 Выявление подозрительных страниц

Запрос событий database_suspect_data_page:

SELECT
    EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS EventTime,
    EventXML.value('(event/data[@name="database_id"]/value)[1]', 'INT') AS DatabaseID,
    EventXML.value('(event/data[@name="file_id"]/value)[1]', 'INT') AS FileID,
    EventXML.value('(event/data[@name="page_id"]/value)[1]', 'BIGINT') AS PageID,
    EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName
FROM (
    SELECT CAST(event_data AS XML) AS EventXML
    FROM sys.fn_xe_file_target_read_file(
        'C:\XEvents\CorruptionMonitoring*.xel',
        NULL, NULL, NULL
    )
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'database_suspect_data_page';
8.6.3.2 Извлечение сведений об ошибке и контекста

Проанализируйте события error_reported на предмет наличия признаков повреждения:

SELECT
    EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS ErrorTime,
    EventXML.value('(event/data[@name="error_number"]/value)[1]', 'INT') AS ErrorNumber,
    EventXML.value('(event/data[@name="severity"]/value)[1]', 'INT') AS Severity,
    EventXML.value('(event/data[@name="message"]/value)[1]', 'VARCHAR(MAX)') AS ErrorMessage,
    EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName,
    EventXML.value('(event/action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText
FROM (
    SELECT CAST(event_data AS XML) AS EventXML
    FROM sys.fn_xe_file_target_read_file(
        'C:\XEvents\CorruptionMonitoring*.xel',
        NULL, NULL, NULL
    )
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'error_reported'
    AND EventXML.value('(event/data[@name="error_number"]/value)[1]', 'INT') IN (823, 824, 825);

8.6.4 Интеграция с DBCC CHECKDB

Используйте данные расширенных событий для руководства DBCC CHECKDB выполнение.

8.6.4.1 Запуск DBCC CHECKDB на основе событий

При обнаружении событий повреждения выполните DBCC CHECKDB для комплексной проверки:

-- After detecting corruption events, run DBCC CHECKDB
DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;

Расширенные события обеспечивают раннее предупреждение, а DBCC CHECKDB выполняет тщательную проверку.

8.6.4.2 Автоматизированные рабочие процессы реагирования на коррупцию

Реализуйте автоматизированные ответы, отслеживая файл событий:

  1. Настроить SQL Server Задание агента по периодическому запросу файла событий мониторинга коррупции.
  2. При обнаружении событий повреждения выполните команду DBCC CHECKDB для затронутой базы данных.
  3. Отправляйте администраторам баз данных оповещения по электронной почте с подробностями событий и результатами DBCC CHECKDB.
  4. Регистрируйте результаты в централизованной таблице мониторинга для анализа тенденций.
8.6.4.3 Баланс между проактивным мониторингом и производительностью

Расширенные события обеспечивают низкозатратное обнаружение повреждений по сравнению с частым выполнением DBCC CHECKDB:

  • Непрерывно запускать расширенные события для обнаружения повреждений в режиме реального времени
  • Выполняйте DBCC CHECKDB только при появлении индикаторов повреждения.
  • Запланируйте регулярную проверку DBCC CHECKDB во время периодов технического обслуживания.
  • Используйте расширенные события, чтобы определить, какие базы данных требуют немедленного внимания.

Такой подход обеспечивает проактивный мониторинг без значительного потребления ресурсов на постоянные проверки целостности.

8.6.4.4 Восстановление поврежденной базы данных

Если в базе данных обнаружены повреждения, можно использовать DBCC CHECKDB для исправления незначительных повреждений. Если это не поможет, можно попробовать стороннюю версию. Инструмент восстановления базы данных SQL, что обычно обеспечивает более высокую скорость восстановления серьезно поврежденных баз данных.

9. Расширенные события в области сервера и в области базы данных

9.1 Сеансы событий на уровне сервера

Сеансы на уровне сервера отслеживают активность на всем протяжении SQL Server Экземпляр. Эти сеансы создаются с помощью предложения ON SERVER и сохраняются в основной базе данных.

CREATE EVENT SESSION [ServerWideMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\ServerWide.xel'
);

Сеансы на уровне сервера фиксируют события из всех баз данных и подходят для мониторинга на уровне экземпляра.

9.2 Сеансы событий в области базы данных (база данных Azure SQL)

Сеансы в области базы данных ограничены одной базой данных и в основном используются в базе данных SQL Azure, где доступ на уровне сервера ограничен:

CREATE EVENT SESSION [DatabaseSpecificMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
    SET filename=N'DatabaseMonitoring.xel'
);

В базе данных SQL Azure файлы событий хранятся в хранилище BLOB-объектов Azure, а не в локальных файловых системах.

9.3 Различия и варианты использования

Сеансы на уровне сервера обеспечивают комплексный мониторинг всех баз данных, но требуют повышенных прав доступа. Сеансы на уровне базы данных обеспечивают изоляцию и подходят для мониторинга отдельных приложений или клиентов.

Используйте сеансы уровня сервера для централизованного мониторинга, устранения неполадок производительности в базах данных и аудита безопасности. Используйте сеансы уровня базы данных в базе данных SQL Azure, многопользовательских средах или при делегировании обязанностей по мониторингу группам разработчиков приложений.

10. Расширенные события в базе данных SQL Azure

10.1. Особенности Azure

База данных SQL Azure реализует расширенные события с некоторыми отличиями от локальной версии SQL Server. Сеансы по умолчанию ограничены базой данных, а хранилище файлов событий использует хранилище BLOB-объектов Azure, а не локальные файловые системы.

Для аутентификации в Azure Blob Storage требуется токен SAS, настроенный в целевом объекте файла событий. Строки подключения указывают на учетную запись хранения и контейнер, где хранятся файлы событий.

10.2 Доступные целевые объекты в Azure

База данных Azure SQL поддерживает следующие целевые объекты расширенных событий:

  • event_file: запись в хранилище BLOB-объектов Azure
  • ring_buffer: хранилище на основе памяти с тем же поведением, что и локальное хранилище
  • event_counter: подсчитывает количество событий

Для целевого объекта event_file требуется настройка с использованием учетных данных Azure Blob Storage:

ADD TARGET package0.event_file(
    SET filename=N'https://yourstorageaccount.blob.core.windows.net/container/EventFile.xel'
)

10.3 Создание сеансов в области базы данных

Создайте сеанс в базе данных SQL Azure:

CREATE EVENT SESSION [AzureMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(sqlserver.sql_text, sqlserver.database_name)
)
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY=4096 KB);

ALTER EVENT SESSION [AzureMonitoring] ON DATABASE STATE = START;

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

11. Лучшие практики и оптимизация производительности

11.1 Минимизация влияния на производительность

Расширенные события разработаны с минимальными накладными расходами, но неправильная настройка может повлиять на производительность. Следуйте этим рекомендациям:

  • Используйте определенные предикаты для фильтрации событий вместо того, чтобы фиксировать все
  • Избегайте сбора ненужных действий, которые увеличивают накладные расходы на обработку.
  • Выбирайте подходящие целевые объекты, исходя из потребностей в хранении данных.
  • Установите разумные размеры буфера и задержки отправки
  • Мониторинг потребления ресурсов сеанса с помощью DMV

11.2 Выбор правильных событий и фильтров

Выбирайте события, которые непосредственно соответствуют вашим целям мониторинга. Избегайте высокочастотных событий без необходимости и всегда применяйте предикаты для сокращения объёма данных.

Например, вместо того, чтобы фиксировать все события sql_statement_completed, отфильтруйте по определенным базам данных или пороговым значениям длительности:

WHERE (
    [sqlserver].[database_name] = N'ProductionDB'
    AND [duration] > 1000000
)

11.3 Руководство по выбору целей

Выберите целевые объекты в соответствии с вашими аналитическими требованиями:

  • Используйте event_file для подробного исторического анализа и долгосрочного хранения.
  • Используйте ring_buffer для мониторинга в реальном времени с минимальным влиянием на операции ввода-вывода.
  • Используйте event_counter, когда важна только частота
  • Использовать гистограмму для анализа распределения
  • Используйте pair_matching для анализа коррелированных событий

11.4 Рекомендации по настройке сеанса

Настройте сеансы с соответствующими ограничениями ресурсов:

  • Установите MAX_MEMORY на основе ожидаемого объема событий и ресурсов сервера.
  • Используйте параметр ALLOW_SINGLE_EVENT_LOSS для минимизации накладных расходов в большинстве сценариев.
  • Установите MAX_DISPATCH_LATENCY, чтобы сбалансировать потребности реального времени с производительностью.
  • Используйте разделение памяти PER_CPU в многопроцессорных системах
  • Не используйте STARTUP_STATE=ON, если не требуется непрерывный мониторинг.

11.5 Управление размером и хранением файла событий

Настройте перенос файлов, чтобы предотвратить неограниченное использование диска:

ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\Session.xel',
        max_file_size=(100),
        max_rollover_files=(10)
)

Эта конфигурация позволяет хранить около 1 ГБ данных о событиях (10 файлов по 100 МБ). Выберите подходящий вариант в зависимости от ваших требований к хранению и доступного хранилища.

12. Устранение неполадок расширенных событий

12.1 Общие проблемы и решения

К распространённым проблемам, связанным с расширенными событиями, относятся: невозможность захвата данных сессиями, снижение производительности, проблемы с целевыми файлами и неожиданное поведение сессии.

12.2 Сеанс не собирает данные

Если сеанс не фиксирует ожидаемые события:

  1. Убедитесь, что сессия запущена, используя sys.dm_xe_sessions.
  2. Проверьте предикаты, чтобы убедиться, что они не отфильтровывают все события.
  3. Чтобы убедиться в срабатывании событий, временно отключите фильтры.
  4. Проверьте разрешения, чтобы убедиться, что у вас есть доступ к просмотру данных сеанса.
  5. Убедитесь, что целевая конфигурация корректна и доступна для записи.
SELECT name, create_time
FROM sys.dm_xe_sessions
WHERE name = 'YourSessionName';

12.3 Ухудшение производительности

Если расширенные события вызывают проблемы с производительностью:

  1. Добавьте предикаты для уменьшения объема событий.
  2. Удалите ненужные действия, которые собирают дополнительные данные.
  3. Увеличьте MAX_DISPATCH_LATENCY, чтобы уменьшить частоту записи.
  4. Измените EVENT_RETENTION_MODE на ALLOW_SINGLE_EVENT_LOSS.
  5. Рассмотрите возможность использования ring_buffer вместо event_file для высокочастотных событий.

12.4 Проблемы с целевым файлом

Проблемы с целевыми файлами часто связаны с правами доступа или объемом дискового пространства:

  1. Проверить SQL Server У учетной записи службы есть права на запись в целевой каталог.
  2. Убедитесь, что на диске достаточно места.
  3. Проверьте, что указанный путь существует и доступен.
  4. Проверьте конфигурацию переноса файлов, если файлы не переносятся так, как ожидалось.

12.5 Отладка с помощью системных представлений

Используйте DMV для диагностики проблем расширенных событий:

-- Check session status
SELECT s.name, s.create_time, s.total_regular_buffers, s.total_large_buffers
FROM sys.dm_xe_sessions AS s;

-- View session targets and their status
SELECT
    s.name AS SessionName,
    t.target_name,
    t.execution_count,
    CAST(t.target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
    ON s.address = t.event_session_address;

-- Check for dropped events
SELECT s.name, s.dropped_event_count, s.dropped_buffer_count
FROM sys.dm_xe_sessions AS s;

13. Продвинутые темы

13.1 Создание пользовательских пакетов событий

Опытные пользователи могут создавать собственные пакеты событий для расширения SQL Server Расширенная функциональность событий. Для этого требуется разработка на C++ и интеграция с SQL Server фреймворк расширяемости.

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

13.2 Шаблоны сеансов мероприятий

SSMS предоставляет встроенные шаблоны для распространённых сценариев мониторинга. Доступ к шаблонам при создании новых сеансов через мастер:

  1. В диалоговом окне «Новый сеанс» нажмите кнопку шаблон падать.
  2. Выберите из доступных шаблонов, например, «Отслеживание деталей запроса» или «Состояние системы».
  3. Измените шаблон в соответствии с вашими конкретными требованиями.

13.3 Интеграция с решениями для мониторинга

Данные расширенных событий могут использоваться в решениях корпоративного мониторинга:

  • Экспорт данных о событиях в централизованные системы регистрации
  • Анализ файлов событий и загрузка данных в базы данных мониторинга
  • Создавайте пользовательские панели мониторинга с помощью инструментов BI
  • Запускать оповещения на основе определенных шаблонов событий
  • соотносить SQL Server события с метриками приложений и инфраструктуры

13.4 Автоматизация и планирование

Автоматизируйте управление расширенными событиями с помощью SQL Server Агент:

  • Создавайте задания для запуска/остановки сессий в определенные временные интервалы.
  • Анализ файла событий расписания и составление отчетов
  • Реализуйте политики хранения данных путем архивации или удаления старых файлов событий.
  • Автоматизируйте реагирование на обнаруженные ситуации, такие как проблемы с производительностью или события безопасности.

14. Миграция из SQL Server Profiler

14.1 SQL Server Сопоставление событий профилировщика с расширенными событиями

Microsoft обеспечивает сопоставление между SQL Server Profiler События и расширенные события. Распространенные сопоставления включают:

  • SQL:Пакетная обработка завершена -> sql_batch_completed
  • SQL:BatchStarting -> sql_batch_starting
  • SQL:StmtCompleted -> sql_statement_completed
  • SQL:StmtStarting -> sql_statement_starting
  • График взаимоблокировок -> xml_deadlock_report
  • Аудит входа -> вход
  • Аудит выхода -> выход из системы

14.2 Преобразование определений трассировки

Преобразовать существующий SQL Server Профилировщик отслеживает сеансы расширенных событий, выявляя эквивалентные события и настраивая соответствующие предикаты. SSMS помогает выполнять распространённые преобразования.

Проверьте фильтры трассировки и преобразуйте их в предикаты расширенных событий. Действия в расширенных событиях заменяют столбцы трассировки из SQL Server Профайлер.

14.3 Сравнение производительности

Расширенные события обеспечивают значительно лучшую производительность, чем SQL Server Профилировщик. Сравнительные исследования показывают, что расширенные события потребляют меньше циклов ЦП и меньше влияют на пропускную способность транзакций.

Расширенные события используют асинхронную обработку и оптимизированное управление памятью, в то время как SQL Server Профилировщик использует синхронный захват событий, который блокируется до завершения обработки трассировки.

15. Заключение

15.1 Краткое изложение основных концепций

SQL Server Расширенные события предоставляют мощную и легкую платформу для мониторинга и устранения неполадок. SQL ServerАрхитектура состоит из событий, действий, предикатов, целей и сессий, которые взаимодействуют для захвата соответствующей активности сервера.

Сессии можно создавать с помощью SSMS или T-SQL, что обеспечивает гибкость как для оперативного устранения неполадок, так и для автоматизированного мониторинга. Различные типы целевых объектов поддерживают разные подходы к анализу, от мониторинга в реальном времени с помощью ring_buffer до исторического анализа с помощью event_file.

Расширенные события обеспечивают превосходную производительность по сравнению с SQL Server Profiler предоставляет более комплексные возможности мониторинга. Система позволяет администраторам и разработчикам баз данных диагностировать проблемы, оптимизировать производительность, повышать безопасность и обеспечивать соответствие требованиям.

15.2 Дальнейшие шаги и дополнительные ресурсы

Чтобы продолжить развивать свой SQL Server Экспертиза XEvents:

  • Реализуйте расширенные события в тестовых средах, чтобы получить практический опыт
  • Ознакомьтесь с документацией Microsoft для получения полных каталогов событий и подробного справочника по синтаксису.
  • Присоединяйся SQL Server общественные форумы для изучения опыта других
  • Изучите расширенные сценарии, такие как пользовательские пакеты и интеграция с платформами мониторинга.
  • Разработать библиотеку шаблонов сессий для распространенных сценариев мониторинга.

16 Раздел часто задаваемых вопросов

Вопрос: что SQL Server Расширенные события?

A: SQL Server Extended Events — это легкая система мониторинга производительности, интегрированная в SQL Server Ядро СУБД, собирающее подробную информацию об операциях сервера с минимальными накладными расходами.

В: Чем расширенные события отличаются от SQL Server Профайлер?

A: Расширенные события обеспечивают лучшую производительность, меньшие накладные расходы и более гибкую настройку, чем SQL Server Профайлер. SQL Server Профилировщик устарел, и Microsoft рекомендует использовать расширенные события для всех задач мониторинга.

В: Могут ли расширенные события повлиять SQL Server представление?

A: При правильной настройке с соответствующими предикатами и ограничениями ресурсов расширенные события оказывают минимальное влияние на производительность. Неправильная настройка без фильтрации может негативно сказаться на производительности.

В: Какие разрешения необходимы для создания сеансов расширенных событий?

A: Вам необходимо разрешение ALTER ANY EVENT SESSION для сеансов в области сервера или разрешение CONTROL на базу данных для сеансов в области базы данных.

В: Как просмотреть данные расширенных событий?

А: Использовать SQL Server Используйте средство просмотра данных в реальном времени Management Studio, запрашивайте файлы событий с помощью sys.fn_xe_file_target_read_file или запрашивайте данные кольцевого буфера через динамические представления управления (DMV).

В: Могут ли расширенные события обнаружить повреждение базы данных?

A: Да, расширенные события могут фиксировать ошибки, связанные с повреждением данных (823, 824, 825), и подозрительные события страниц, обеспечивая раннее предупреждение о потенциальных проблемах с повреждением данных.

В: В чем разница между событиями, действиями и предикатами?

А: События — это происшествия, которые вы хотите отслеживать. Действия добавляют дополнительную информацию к зафиксированным событиям. Предикаты фильтруют события на основе условий, чтобы уменьшить объем данных.

В: Как отслеживать запросы из определенных приложений или баз данных?

A: Используйте предикаты в конфигурации событий для фильтрации по database_name, client_app_name или другим соответствующим полям.

В: Какие целевые объекты следует использовать для расширенных событий?

A: Используйте event_file для постоянного хранения и исторического анализа, ring_buffer для мониторинга в реальном времени с низкими накладными расходами, event_counter для простого отслеживания частоты и histogram для анализа распределения.

В: Доступны ли расширенные события в базе данных SQL Azure?

A: Да, база данных SQL Azure поддерживает расширенные события в области базы данных с файлами событий, хранящимися в хранилище BLOB-объектов Azure.

В: Как устранить неполадки сеанса расширенных событий, если данные не собираются?

A: Убедитесь, что сессия запущена, проверьте, не фильтруют ли предикаты все события, подтвердите конфигурацию целевого объекта и просмотрите права доступа с помощью системных представлений управления.

В: Могу ли я автоматизировать управление расширенными событиями?

A: Да, используйте SQL Server Задачи агента включают запуск/остановку сессий, анализ файлов событий, реализацию политик хранения данных и реагирование на обнаруженные ситуации.

Референсы


Об авторе

Юань Шэн старший администратор баз данных (DBA) с более чем 10-летним опытом работы в SQL Server сред и управления корпоративными базами данных. Он успешно реализовал сотни сценариев восстановления баз данных в финансовых, медицинских и производственных организациях.

Юань специализируется на SQL Server восстановление базы данных, решения с высокой доступностьюи оптимизация производительности. Его обширный практический опыт включает управление многотерабайтными базами данных, внедрение... Группы доступности Always Onа также разработка автоматизированных стратегий резервного копирования и восстановления для критически важных бизнес-систем.

Благодаря своим техническим знаниям и практическому подходу Юань фокусируется на создании всеобъемлющих руководств, которые помогают администраторам баз данных и ИТ-специалистам решать сложные задачи. SQL Server Он эффективно решает задачи. Он всегда в курсе последних новостей. SQL Server выпускает новые версии и развивает технологии баз данных Microsoft, регулярно тестируя сценарии восстановления, чтобы убедиться, что его рекомендации соответствуют реальным передовым практикам.

Есть вопросы о SQL Server Восстановление или требуется дополнительное руководство по устранению неполадок в базе данных? Юань приветствует отзывы и предложения для улучшения этих технических ресурсов.

Поделись сейчас: