Знакомство с расширенными событиями SQL Server

Расширенные события SQL Server (Extended Events) представляют собой общую систему обработки событий для серверных систем. Инфраструктура расширенных событий поддерживает корреляцию данных из SQL Server, а при определенных условиях — корреляцию данных из операционной системы и приложений баз данных. В последнем случае выход расширенных событий должен быть направлен в приложение средства отслеживания событий для Windows (ETW) в целях корреляции данных событий с данными операционной системы или приложений баз данных.

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

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

  • Средствами трассировки, например SQL Trace и системным монитором.

  • Инструментами ведения журналов, например журналом событий Windows или журналом ошибок SQL Server.

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

Структура и функции расширенных событий

Ключевые аспекты расширенных событий.

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

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

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

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

Расширенные события могут синхронно создавать данные событий (и асинхронно обрабатывать эти данные), чем обеспечивается гибкое решение для обработки событий. Кроме того, расширенные события предоставляют следующие возможности.

  • Унифицированный подход к обработке событий на всей серверной системе с одновременным разрешением для пользователей изолировать отдельные события в целях устранения неполадок.

  • Интеграция и поддержка существующих инструментов приложения ETW.

  • Полностью настраиваемый механизм обработки событий на основе языка Transact-SQL.

  • Возможность динамического мониторинга активных процессов при минимальном влиянии на эти процессы.

Применение расширенных событий в трассировке событий Windows

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

Сценарии использования расширенных событий

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

  • Устранение неполадок, возникающих при усечения рабочего множества.

  • Устранение чрезмерной загрузки ЦП.

  • Устранение неполадок взаимоблокировок.

  • Корреляция активности запросов с журналами средства отслеживания событий Windows.

Устранение неполадок, возникающих при усечении рабочего множества

Обнаружено резкое снижение производительности рабочего сервера, приведшее к превышению времени ожидания клиентских приложений. Эта проблема появляется периодически, а производительность через 10—15 минут возвращается в норму.

В журнале ошибок SQL Server обнаружены следующие сообщения:

«Значительная часть серверного процесса выгружена на диск. Это может привести к снижению производительности. Длительность: 300 секунд. Текущая загрузка памяти 34%».

«Неуправляемый прослушиватель порта завершения ввода-вывода».

ПримечаниеПримечание

IOCP означает «порт завершения ввода-вывода». Через этот порт пользовательские запросы распространяются по сети. Сообщение указывает, что порт завершения был блокирован в течение последней минуты.

Возникают подозрения, что SQL Server не отвечает достаточно быстро из-за нагрузки на оперативную память сервера. При проверке памяти с помощью диспетчера задач выясняется, что доступной памяти более чем достаточно. При попытке подключения к базе данных в среде Среда SQL Server Management Studio истекает время ожидания соединения. Можно подключиться к серверу, выполнив команду SQLCMD — A в командной строке Windows. Открывается сеанс выделенного административного соединения.

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

  • Добавляет события для сигнала системной памяти и изменения общего объема серверной памяти.

  • Направляет этот выход в приложение ETW. Этот выход записывается в файл, который создается на диске, не используемом виртуальной памятью или файлами базы данных SQL Server.

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

Для корреляции трассировки Windows и SQL Server приложения ETW используется программа tracerpt.exe. Ищется событие, указывающее, что было установлено уведомление о недостаточном объеме системной памяти, но оно не найдено. Вместо этого встречается большое количество сбоев страниц во всех процессах сервера. При изучении событий, предшествующих сбоям страниц, обнаруживается, что рабочие множества всех процессов были усечены в ответ на запрос о выделении памяти для одного из драйверов.

Устранение чрезмерной загрузки ЦП

Исследуется чрезмерная загрузка ЦП на рабочем сервере. Для определения, являются ли причиной этого выполняющиеся в системе запросы, используются динамические административные представления (DMV). Выясняется, что большинство запросов представляют собой пользовательские нерегламентированные запросы. Сведений, полученных от DMV, недостаточно для диагностики проблемы.

Создается сеанс расширенных событий, который выполняет следующие действия.

  • Включает события для завершения инструкции с предикатами, задающими пороговое значение загрузки ЦП.

  • Имеет действие, предназначенное только для сбора плана запроса при возникновении события.

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

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

Устранение неполадок взаимоблокировок

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

  • Настраивает для сеанса отслеживание события взаимоблокировки.

  • Определяет цель, которая собирает статистику на основе идентификатора взаимоблокировок.

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

Корреляция активности запросов с журналами средства отслеживания событий Windows

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

  • Добавляет операции чтения с диска в качестве события сеанса.

  • Направляет собранные данные в приложение ETW.

При старте сеанса расширенных событий запускается трассировка ядра Windows ETW. Оба сеанса останавливаются через 10 минут.

Для слияния трассировки Windows и SQL ETW используется программа tracerpt.exe. С помощью объединенной трассировки можно коррелировать и находить запросы на чтение диска от SQL Server к ядру Windows. Этот анализ указывает, что причиной длительной задержки запросов ввода-вывода является SQL Server. Используя эти сведения, можно окончательно определить, что проблема ввода-вывода заключается в физическом пути ввода-вывода.