Встроенные средства анализа производительности SQL Server

Ряд весьма полезных средств анализа и повышения производительности сервера встроены непосредственно в SQL Server.

А. Системная хранимая процедура sp_monitor позволяет определить текущие значения различных внутренних счетчиков сервера, отлеживающих ход его работы. На приведенной ниже распечатке представлены результаты двух последовательных вызовов процедуры sp_monitor. Для каждого параметра она выдает две величины: первая соответствует значению счетчика, накопленному с момента последнего перезапуска сервера, а вторая (прйведенная в скобках) показывает изменение этого значения с момента предыдущего вызова sp_monitor. Запуская эту процедуру через регулярные интервалы времени, администратор сервера может наглядно оценить скорость изменения интересующих его показателей.

Например, при первом запуске sp_monitor полное количество операций записи на диск (total_write) после начала работы сервера составило 3472865, а при втором — 3472895(30).

Параметр seconds (количество секунд, истекшее с момента предыдущего запуска sp_monitor) оказывается равным 28. Это означает, что за последние 28 секунд сервер выполнил 30 операций записи на диск, что примерно соответствует 1 операции в секунду.

Запущенная в качестве cron задачи, процедура sp_monitor может выполняться автоматически через заданный период времени с выдачей результатов в дисковый файл. Сравнивая такие файлы, накопленные за определенный период времени, легко определить производительность сервера в прошлом и сравнить ее с текущими показателями.

В. Чтобы узнать выбранные оптимизатором запросов планы обработки команд хранимой процедуры, командного файла на языке SQL либо отдельного SQL-предложения, перед их выполнением необходимо ввести команду set showplan. Учтите, что в выдаче этой команды не содержится информации о триггерах таблицы данных, которые могли быть активизированы в процессе выполнения запроса. План выполнения хранимой процедуры создается только при ее первом вызове и остается неизменным вплоть до повторной компиляции процедуры. Поэтому анализ этого плана при отладке хранимой процедуры вручную не позволяет выявить все проблемы, которые могут впоследствии замедлить ее обработку.

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

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

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

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

C. Чтобы найти причины снижения быстродействия сервера, полезно выдать план выполнения запроса без фактического исполнения этого запроса. Для этого вместе с set showplan необходимо ввести команду set noexec.

D. Можно также выдать информацию и о количестве операций ввода-вывода (как дискового, так и логического ввода-вывода в кэш-буфер), выполнив команды set statistics io on или set statistics time on. При необходимости обе команды могут использоваться одновременно.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100