Мониторинг SQL Server

ОГЛАВЛЕНИЕ

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

Но разве это единственное, что можно сделать? Существует возможность проводить упреждающий мониторинг производительности, простую процедуру управления, которая использует определение базовых параметров работы системы, получение эталонов и непрерывное наблюдение. В этой статье я расскажу о том, как применять упреждающий мониторинг и как создать бесплатную контрольную систему с использованием Windows System Monitor.

Упреждающий мониторинг

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

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

Базовые параметры, эталон, монитор

Давайте начнем с определения нескольких терминов. Базовые параметры (baseline) - это набор параметров, отображающих поведение сервера и приложения в обычных условиях. Базовые параметры получены как средние по результатам нескольких замеров, выполненных в одинаковых условиях; они являются ориентирами для сравнения.

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

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

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


Шаг 1: Определить базовые параметры производительности

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

Для того чтобы наглядно показать качество функционирования, лучшие базовые параметры используют немного графиков (в идеале один), чтобы с первого взгляда можно было увидеть, как работает сервер. Когда будут определены базовые параметры, нужно сделать следующее. Во-первых, выберите вариант для сохранения данных по производительности в системном журнале или их отображения в реальном времени. Идеально иметь обе возможности: журналы регистрации позволяют вернуться к показаниям в любой момент времени, чтобы проанализировать, какой была производительность, когда непосредственное наблюдение за системой не велось. Мониторинг в реальном времени не занимает рабочее пространство на диске и ресурсы сервера, но требует уделить системе 100 процентов внимания. Во-вторых, нужно определить интервал, через который будет вестись наблюдение, учитывая затраты в производительности для сбора данных и операции ввода-вывода данных и оценить затраты на требуемое пространство. Чем больше интервал, тем выше вероятность, что интересующие данные по производительности не будут получены. И, наконец, выберите локальный или дистанционный мониторинг. Локальный мониторинг, при котором процесс наблюдения использует контролируемый сервер, добавляет непроизводительные издержки на процессор и диск сервера. Дистанционный мониторинг, который использует отдельный сервер, может избавить от подобных проблем, однако это сильно увеличивает рабочую нагрузку на сеть.

В Таблице 1 перечислены метрики System Monitor или счетчики, которые рекомендуется использовать для определения базовых параметров. Я не могу сказать, какое значение "правильное" в контексте отдельно взятого приложения, так как оно меняется от системы к системе. Используйте среднее значение различных базовых параметров для установки обычной стандартной (по базовым параметрам) производительности и обозначьте, что этот вариант и является правильным для эксплуатируемой системы

Определение базовых параметров при помощи System Monitor

Теперь для целей сбора базовых параметров вызовем System Monitor. Откроем Control Panel, Administrative Tools, Performance. Дважды щелкнем на Performance Logs and Alerts на левой панели. Нажмем правую кнопку на Counter Logs и укажем New Log Settings. Введите имя для графика, затем нажмите OK. В диалоговом окне Select Counters выберите первый счетчик, затем нажмите Add. Повторяйте эти операции до тех пор, пока все счетчики не будут добавлены, затем нажмите Close.

Для начала попробуйте по умолчанию 15-секундный интервал. Или выберите другой интервал, нажав Properties (либо используйте клавишную комбинацию быстрого вызова Ctrl + Q), а затем введите значение под обозначением Sample automatically every : _ seconds. Более длинные интервалы занимают меньше места, однако они обеспечивают менее подробные данные.

Выберите таблицу Log Files и определите место, где будут храниться данные. Есть возможность просмотреть данные позже, используя представление View Log File Data. System Monitor будет выглядеть так, как на экране 1, когда он собирает данные базовых параметров производительности. Видно, что при одновременном отслеживании множества счетчиков можно собрать очень много данных, так что следует внимательно выбирать счетчики для основной линии.


Шаг 2: Установка эталонных значений

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

Для эталонов используется тот же режим мониторинга, что и для определения базовых параметров. Можно использовать свое решение или один из распространенных промышленных средств, таких как TPC-C или SAP, но лучшие результаты вычисления эталонных значений получаются при разработке обычных индивидуальных сценариев, которые настроены на использование определенного сервера базы данных и его приложений.

Можно создать собственный сценарий, используя набор сценариев T-SQL, утилиты osql либо Query Analyzer, SQL Profiler и System Monitor. Разработка сценариев нагрузочных тестов в T-SQL обычно занимает несколько дней. Еще больше времени может потребоваться на сбор данных выполнения нагрузочных тестов и анализ полученных данных.

После определения базовых параметров производительности сервера при заранее заданных нагрузках можно будет узнать, чего можно ожидать от системы. Используйте данные, собранные при получении эталонных значений для формирования основы планового наблюдения. Например, выяснилось, что сервер способен обеспечить до 249 транзакций в секунду, прежде чем его работа начнет замедляться. В этом случае можно установить уведомление с низким приоритетом, когда сервер достигнет загрузки около 200 TPS и уведомление с высоким приоритетом, когда сервер достигнет 235 TPS. Такой способ позволит администратору узнать о возможных проблемах с сервером и принять необходимые меры до того, как пользователи что-нибудь заметят. И никаких критических ситуаций. Теперь это возможно.


Шаг 3: Плановый мониторинг

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

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

Установка SQL Server Agent может быть продолжительной по времени и сложной, поэтому нужно будет обратиться к разделу описания Alerts в SQL Server Books Online (BOL) . SQL Server Agent обычно осуществляет текущий контроль за сообщениями об ошибках работы сервера базы данных и не контролирует выполнение.

Для контроля производительности сервера используется System Monitor для наблюдения за текущими счетчиками (установите частоту опроса с точностью до 15 минут).

Memory-Pages/sec

Network Interface-Bytes total/sec

Physical Disk-Disk Transfers/sec

Processor-% Processor Time

SQLServer:Access Methods-Full Scans/sec

SQLServer:Buffer Manager-Buffer Cache Hit Ratio

SQLServer:Databases Application Database-Transactions/sec

SQLServer:General Statistics-User onnections

SQLServer:Latches-Average Latch Wait Time

SQLServer:Locks-Average Wait Time

SQLServer:Locks-Lock Timeouts/sec

SQLServer:Locks-Number of Deadlocks/sec

SQLServer:Memory Manager-Memory Grants Pending

Установите значение для каждого счетчика между значениями базовых параметров и эталонными значениями, которые показало тестирование. Например, можно установить уведомление, когда счетчик достигает 75 процентов значения самой высокой нагрузки, и предостерегающее сообщение, когда он проходит 90 процентов.

Для выполнения предупреждений можно использовать бесплатные инструменты, такие как SQL Server Alerts & Notifications, System Monitor либо приобрести Microsoft Operations Manager (MOM) или другие средства. Я рекомендую установить предупреждения, по крайней мере, для следующих ситуаций:

  • ошибки, влияющие на эксплуатацию, особенно ошибки с показателем важности от 19 до 25
  • блокировки
  • использование процессора
  • использование диска
  • сканирования (SQLServer:Access Methods)

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

  • журнал SQL Server
  • журнал SQL Agent
  • журнал приложений Windows, Security, и System
  • журнал исполнения заданий SQL Server

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

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

Таблица 1. Объекты и счетчики System Monitor для определения базовых параметров

Объект и счетчик  Описание 
Memory-Pages/sec Число страниц чтения или записи на диск в секунду. Этот счетчик - первичный индикатор типов ошибок, вызванных системными задержками или проблемами с производительностью
Network Interface-Bytes total/sec Число байтов, проходящих по сетевому интерфейсу в секунду. Когда показатель этого счетчика снижается или имеет такую тенденцию, это указывает на то, что проблемы с сетью могут оказывать влияние на приложение
PhysicalDisk-Disk Transfers/sec Оценка дисковых операций чтения/записи. Установите счетчик для каждого физического диска на сервере
Processor-% Processor Time Процентное соотношение времени, которое процессор тратит выполнение рабочего потока. Этот счетчик работает как первичный индикатор деятельности процессора. Если все процессоры, работающие на SQL Server, показывают стопроцентное использование, запросы конечного пользователя, скорее всего игнорируются
SQLServer:Access Methods-Full Scans/sec Число неограниченных заполненных таблиц или индексных сканирований в секунду. Понижение значений этого счетчика к лучшему, потому что просмотры часто вызывают нехватку ресурсов проблемы кеширования
SQLServer:Buffer Manager-Buffer Cache Hit Ratio Процентное отношение страниц, которые не требовали чтения от диска. Чем выше их число, тем меньше производится ввода/вывода на диск. В хорошо настроенной системе это значение должно быть 80 или выше.
SQLServer:Databases-Log Growths На сколько, для конкретной базы данных, вырос файл транзакций. В хорошо настроенной системе значение этого счетчика должно быть низким, вероятно, меньше чем один в несколько дней
SQLServer:Databases Application Database-Percent Log Used Процентное отношение свободного места в журнальном файле. Этот счетчик планово варьирует, но не должен достигать 100
SQLServer:Databases Application Database-Transactions/sec Число транзакций, подтвержденных в базе данных. Этот счетчик временами опускается в эталонах. Наблюдайте за тем, когда транзакции начинают выстраиваться в очередь, это указывает на то, что дисковый ввод/вывод может быть медленным
SQLServer:Latches-Average Latch Wait Time Среднее время задержки запроса перед заполнением. Это значение счетчика может быть высоким, когда сервер сталкивается с соперничеством за ресурсы, особенно за память или за ввод/вывод
SQLServer:Locks-Average Wait Time, Lock Waits/sec, Number of Deadlocks/sec Временные блокировки удерживают ресурсы SQL Server. Наблюдайте за восходящей тенденцией этих связанных с блокировкой счетчиков, что указывает на возможную проблему с производительностью
SQLServer:General Statistics-User Connections Число пользовательских подключений к серверу базы данных. Проверяйте любые заметные сдвиги в значении этого счетчика. Они могут указывать на сетевые проблемы и свидетельствовать о нагрузках и замедлении
SQLServer:Memory Manager-Memory Grants Pending Текущее число процессов, ожидающих предоставления пространства памяти. Высокое или растущее значение может указывать на недостаточный объем памяти
SQLServer:User Settable-Query (a tracer query) Специализированный счетчик, также известный как указатель запросов. Этот счетчик - созданный пользователем запрос, который указывает общую скорость или эффективность системы. Чтобы устанавливать это значение, приложение вызывает sp_user_counter1 и возвращает число