Оптимизация производительности для SQL Server: уменьшить время выполнения хранимых процедур или разгрузить сервер? - PullRequest
1 голос
/ 03 июня 2010

У нас есть веб-сервис, который обеспечивает поиск по отелям. Существует проблема с производительностью: один запрос к службе занимает около 5000 мс. Почти все время проводится в базе данных, выполняя процедуры хранения. Во время запроса наш сервер (mssql2008) потребляет ~ 90% процессорного времени. Когда 2 запроса выполняются параллельно, среднее время увеличивается и составляет около 7000 мс. Когда количество запросов увеличивается, увеличивается и среднее время ответа. У нас 20-30 запросов в минуту.

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

1) Попробуйте уменьшить время выполнения хранимых процедур

2) Попробуйте найти способ как разгрузить сервер

Интересно услышать от людей, которые занимаются бронированием сайтов.

Ответы [ 3 ]

2 голосов
/ 03 июня 2010

Интересно услышать от людей кто занимается бронированием сайтов. Спасибо!

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

запустить несколько процедур из SSMS и посмотреть планы выполнения

Также неплохо бы запустить профилировщик. Что касается ожидаемой продолжительности жизни вашей страницы и коэффициента попадания в кеш-буфер, посмотрите на Используйте sys.dm_os_performance_counters, чтобы получить коэффициент попадания в буферный кеш и счетчики ожидаемой продолжительности жизни , чтобы получить эти числа

1 голос
/ 03 июня 2010

Я думаю, что первое, что вы должны сделать, - это определить, что происходит на сервере.

  1. Используйте SQL Server Profiler, чтобы получить точную картину активности на сервере.
  2. Определите, какие процедуры / операторы SQL занимают больше всего ресурсов
  3. Идентификация высокоприоритетных операций SQL, занимающих много ресурсов / занимающих время
  4. Приоритетность
  5. Fix

Теперь, когда я говорю «исправить», я имею в виду, что вы должны выполнить процедуру / инструкцию вручную в SSMS - убедитесь, что у вас включен «Показать план выполнения».

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

0 голосов
/ 03 июня 2010

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

1) удалить все курсоры или циклы с помощью операций на основе набора
2) убедитесь, что все запросы используют индекс и эффективный план выполнения (проверьте это с помощью SET SHOWPLAN_ALL ON)
3) убедитесь, что нет блокировки или блокировки, замедляющей его ( см. Приведенный здесь запрос )

без дополнительной информации о специфике трудно сделать какие-либо предложения.

Почти все время проводится в базы данных путем выполнения хранения процедур.

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

...