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

1. Введение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2.4 Действия

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

К распространенным действиям относятся sql_text для захвата операторов запроса, database_name для идентификации базы данных и client_h.ostИмя для отслеживания исходного сервера. Действия предоставляют необходимый контекст для устранения неполадок и анализа.

2.5 Tarполучает

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

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

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

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

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

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

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

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

  • Оператор CREATE EVENT SESSION определяет новый сеанс, но неtart это. Сеанс находится в остановленном состоянии до тех пор, пока не будет явно активирован.
  • Оператор ALTER EVENT SESSION изменяет конфигурацию сеанса или меняет его состояние между остановленным и starТед.
  • Оператор DROP EVENT SESSION полностью удаляет определение сеанса с сервера.

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

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

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

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

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

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

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

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

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

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

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. При желании выберите Start сеанс событий на сервере starтрубка для включения автоматической активации сеанса.
  3. Шаблон сеанса по умолчанию: Blank. Вы можете использовать другие шаблоны, если используете предопределенную конфигурацию.

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

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

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

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

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

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

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

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

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

(1) файл_события Tarполучить

Файл_события target сохраняет данные в файлы на диске с расширением .xel:

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

Установить сеанс tarдобраться до event_file в SSMS

(2) кольцевой буфер Tarполучить

Кольцевой буфер target сохраняет события в памяти для быстрого доступа без дискового ввода-вывода:

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

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

(3) счетчик_событий Tarполучить

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

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

(4) гистограмма Tarполучить

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

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

(5) парное_соответствие Tarполучить

Сопоставление пар tarФункция get сопоставляет связанные события, такие как захват и снятие блокировки. Это позволяет анализировать парные операции и их временные соотношения.

Установить сеанс tarдобраться до pair_matching в SSMS

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. Выберите действия для добавления дополненийtary информация, такая как database_name или client_app_name.
    Настройте действия события.
  5. Обзор Поля событий раздел, чтобы увидеть, какие поля автоматически регистрируются.
  6. Очистите все ненужные поля, чтобы уменьшить объем данных.
    Настройте поля события.

4.6 Starting и управление сеансами

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

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

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

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

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

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

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

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

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

Start путем создания сеанса с описательным именем:

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 Добавление события Tarполучает

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

5.3.1 ДОБАВИТЬ TARСинтаксис GET

Добавить tarполучает с помощью ADD TARПредложение GET после определения всех событий:

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

Префикс package0 указывает target идет из базового пакета.

5.3.2 Настройка Tarполучить параметры

Каждый tarТип get принимает заданные параметры. Для event_file настройте имя файла, max_file_size и max_rollover_files:

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 для полного сохранения данных в cost потенциального влияния на производительность.

5.4.2 MAX_DISPATCH_LATENCY

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

WITH (
    MAX_DISPATCH_LATENCY=30 SECONDS
)

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

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

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

WITH (
    MEMORY_PARTITION_MODE=PER_CPU
)

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

5.5 StarЗапуск, остановка и изменение сеансов

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

5.5.1 ИЗМЕНЕНИЕ СЕАНСА СОБЫТИЙ для Starт/Стоп

Starсеанс ta после создания:

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. Работа с событием Tarполучает в деталях

6.1 файл_события Tarполучить конфигурацию

Файл_события target обеспечивает постоянное хранилище данных о событиях с гибкими возможностями настройки.

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_tarФункция get_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 кольцевой буфер Tarполучить использование

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

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

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

ADD TARGET package0.ring_buffer

События остаются доступными только пока сеанс активен и SQL Server работает. Данные lost когда сеанс останавливается или сервер останавливаетсяtarц.

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 счетчик_событий Tarполучить

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

ADD TARGET package0.event_counter

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

6.4 гистограмма Tarполучить

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

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

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

6.5 парное_соответствие Tarполучить

Сопоставление пар target сопоставляет связанные события, такие как получение блокировок с их освобождением:

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_tarФункция get_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 tarполучает:

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_tarполучает

Детали tarсвязывается с активными сеансами:

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: каталогизирует все доступные события, действия и tarполучает
  • 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)

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

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 Настройка файла событий Tarполучить для оповещений

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

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, а не локальные файловые системы.

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

10.2 Доступные Tarпопадает в Azure

База данных SQL Azure поддерживает следующие расширенные события: tarполучает:

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

Файл_события tarдля получения требуется настройка с учетными данными хранилища BLOB-объектов Azure:

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 Минимизация влияния на производительность

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

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

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

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

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

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

11.3 Tarполучить руководство по выбору

Выберите tarполучает на основе ваших требований к анализу:

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

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

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

  • Установите MAX_MEMORY на основе ожидаемого объема событий и ресурсов сервера.
  • Используйте ALLOW_SINGLE_EVENT_LOSS для минимизации накладных расходов в мost Сценарии
  • Установите 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 Общие проблемы и решения

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

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

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

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

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

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

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

Файл 12.4 Tarполучить проблемы

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

  1. Проверить SQL Server учетная запись службы имеет разрешения на запись в tarполучить каталог.
  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 Агент:

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

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Архитектура состоит из событий, действий, предикатов, tarполучает и сеансы, которые работают вместе для сбора соответствующей активности сервера.

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

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

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

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

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

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), и подозрительные события страниц, обеспечивая раннее предупреждение о потенциальных проблемах с повреждением данных.

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

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

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

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

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

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

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

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

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

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

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

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

Референсы


Об авторе

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

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

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

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

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