Решение проблем с запросами в Microsoft SQL Server
Содержание |
Для технических специалистов, программистов и веб-мастеров.
Первоначально рекомендуется ознакомится со статьёй базы знаний хостинга проблема медленных SQL запросов – в статье основной упор делается на mySQL, но даётся ряд базовых знаний, верных и для Microsoft SQL Server. Далее по тексту предполагается, что вы с указанной статьёй знакомы.
Хостинг 1Gb.ru предлагает услугу Microsoft SQL Server в рамках виртуального (shared, разделяемого) хостинга. Это означает, что на одном сервере находятся ресурсы множества клиентов и они не должны мешать друг другу. Специфика сайтов и сопутствующих служб запускаемых на виртуальном хостинге в том, что они не должны рассчитывать на монопольное использование ресурсами сервера хостинга. Если ваш проект оперирует большим объёмом данных и требует для этого больших ресурсов (к примеру, он постоянно читает и пишет большие блоки данных на диск и на это время фактически захватывая его под свои нужды вытесняя другие задачи) – он не предназначен для виртуального хостинга. Если для стабильной работы сайта требуется большой объём памяти для удержания в ней (кэширования) какой-то информации – сайт не предназначен для виртуального хостинга. Если есть любые другие попытки длительного монопольного владения всеми или ключевыми ресурсами сервера и нет расчёта на то, что кроме вашей задачи на сервере исполняются сотни и тысячи других равноправных задач – проект не предназначен для виртуального хостинга. В этом случае, попытка размещения проекта на виртуальном хостинге является ошибкой ответственных за проект лиц. Если, вдруг, это ваша ситуация – вам не повезло, решить эту проблему на виртуальном хостинге нельзя и дальше можно не читать: вам нужны услуги выделенного сервера либо мощной VDS, где ваш сайт сможет использовать все выделенные доступные ресурсы и работать эффективно.
Для каждого запроса к БД вычисляются параметры исполнения, если они малы и не могут являться источником излишней нагрузки на сервер баз данных то они игнорируются. В противном случае запросы сохраняются и могут быть проанализированы. На основании анализа может быть вынесено решение об предупреждении либо остановки аккаунта хостинга, базы данных либо её частей.
Microsoft SQL Server имеет встроенную систему трассировки исполняемых запросов, используя которую можно получать данные об исполняемых запросах и процессах внутри SQL Server. Создавать новые трассировки можно как программно, используя соответствующие хранимые процедуры (начать стоит с sp_trace_create) так и при помощи инструментов идущих в комплекте с SQL Server – SQL Server Profiler. Profiler используя систему трассировок позволяет отслеживать и записывать в лог запросы удовлетворяющие некоторым параметрам а также характеристики их исполнения.
Система мониторинга Microsoft SQL Server на 1Gb.ru использует систему трассировок программно, минуя профайлер – это позволяет более эффективно отслеживать запросы и не зависеть от внешних процессов. Если вы являетесь программистом и хотите отлаживать или отслеживать запросы на локальном сервере – следует использовать Profiler. Использовать систему трассировки на серверах хостинга не получится – для этого у клиентов хостинга нет достаточных прав.
С целью контроля нагрузки от исполнения запросов для каждого запроса записываются следующие параметры исполнения:
Также для лучшего понимания сути происходящего для запроса собираются следующие данные:
* - только для версии 2005 и выше
Ключевыми параметрами являются Reads и CPU: Reads свидетельствует о потреблении дисковой подсистемы (количество операций чтения с диска) и потреблении памяти (количество операций чтения не с диска), CPU свидетельствует о потреблении ЦПУ сервера. Чем больше характеристики, тем хуже. При достижении некоторой критической точки становится совсем плохо и работа базы начинает влиять на общую производительность сервера свыше тех лимитов, которые ей предоставлены тарифным планом и регламентом хостинга.
Считается, что хорошими показателями исполнения запросов являются следующие числа:
Да, верно. Цифры из предыдущего раздела являются разумным ориентиром. Контроль нагрузки запросов основывается на ряде статей регламента хостинга – 1.4.d, 2.3.a, 2.3.b, 2.3.d, 2.3.e
В полном списке функций личного кабинета по ссылке "Медленные SQL запросы (MSSQL)".
В зависимости от того, являетесь ли вы разработчиком скриптов и БД или нет – существует несколько вариантов решения проблем.
Нет, нельзя. Мы не можем продолжать обслуживание БД, которая является источником проблем производительности сервера. Если оставить как есть - база данных будет остановлена и сайт работать не будет.
Представьте себя на другой стороне - вы клиент хостинга, используете БД MSSQL, все ваши запросы отлажены и великолепно работают. Однако ваш сайт "тормозит" из-за того, что соседний клиент развернул проект не предназначенный для виртуального хостинга или содержащий грубые ошибки программирования. Что будет вашим первым, вторим или третьим желанием?
Наша конечная цель в том, что бы таких желаний не возникало и у всех всё работало прекрасно. Поэтому мы вынуждены вмешиваться в работу проектов с проблемами вплоть до отказа в услугах хостинга.
Если вы используете CMS для которой требуется поддержка СУБД Microsoft SQL Server и у вас нет возможности исправлять код CMS.
Рекомендуем вам выполнить следующие пункты:
Мы также можем предложить несколько статей по решению проблем CMS исходя из своего опыта и из опыта наших клиентов:
Если БД и скрипты являются плодом вашей собственной разработки, то вам следует оптимизировать работу скриптов и БД.
Для проведения работ по оптимизации работы базы данных – сделайте бэкап БД, скачайте его на локальный компьютер и разверните локально. Все работы и тесты производите с локальной БД, так как они тоже могут вызывать излишнюю нагрузку и являться основанием для блокировки аккаунта по перегрузке. Используйте Profiler в сочитании со средством выполнения запросов и просмотра Execution Plan. Выпишите все типы запросов, которые могут встретится на сайте и примените пункты (ниже) для каждого типа запросов.
Посмотрите статьи по оптимизации производительности MSSQL, например, тут - http://www.sql.ru/articles/articles.aspx?g=MSSQLServer
В общем виде, следуйте следующим лёгким правилам: