SQL Proc медленнее на новой / более быстрой машине? - PullRequest
2 голосов
/ 08 июня 2011

У меня довольно сложная процедура, которая в настоящее время занимает около 1:30 (мин: сек) для завершения.Мы переходим на новый сервер, и когда я выполняю тот же запрос к тем же данным на новом сервере, для его завершения требуется почти 2:30.

Старый сервер представляет собой одноядерный процессор - двухъядерный Intel 4 2.8Процессор с тактовой частотой 3 ГГц и оперативной памятью 3 ГБ под управлением Windows 2000 и SQL 8. Новый сервер представляет собой двухъядерный процессор (всего 4 ядра) с тактовой частотой 3,4 ГГц и 6 ГБ оперативной памяти под управлением Windows 2008 R2 и SQL 2008.

Я надеялся, что эта процедура (которая запускается часто каждый час) будет быстрее с новой машиной и новым SQL, но теперь она более чем на 50% медленнее ?!Я работаю в небольшой компании, занимающейся программированием и сетью, но я не администратор.Возможно, на старой машине / SQL выполняется какая-то оптимизация, которой нет на новой машине / SQL?Новая машина ничего не делает, кроме запуска SQL, который настроен на использование всей доступной оперативной памяти.

Когда я запускаю процедуру, кажется, что используется только одно ядро ​​процессора и вся оперативная память, которую она может получить (то же самое наобе машины).И кажется, что он использует только один процессор в среднем на 50%.

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

Брайан

Ответы [ 3 ]

4 голосов
/ 08 июня 2011

Я предполагаю, что вы обновили базу данных, выполнив восстановление, обновили ли вы статистику (с полной проверкой) или перестроили все индексы?В противном случае вы не получите оптимальные планы

для полного сканирования, вы можете сделать это

EXEC sp_msForEachTable 'UPDATE STATISTICS ? WITH FULLSCAN'

Это может занять некоторое время, если у вас большой стол

2 голосов
/ 08 июня 2011

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

Вот несколько распространенных способов решения этой проблемы:

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

  2. Предотвращение перехвата параметров - Иногда SQL Server просматривает ваши параметры и поворачивается к очень конкретному плану запроса.Иногда это очень нежелательно и может привести к очень быстрому SPROC и превратить его в многоминутного бегемота.Повторное декларирование и копирование всех ваших параметров, это становится не проблема.

  3. Вы также должны очистить вашу статистику

    EXEC sp_MSForEachTable 'Update Statistics ''?'' with FULLSCAN'

1 голос
/ 09 июня 2011

Если обновление статистики и других изменений в БД не помогает, проверьте сам сервер.

Есть ли на новом сервере только один диск, а старый сервер разделен на несколько дисков?

Новые жесткие диски работают медленнее, чем старые?

Включена ли антивирусная проверка на новом сервере?

Поиск других проблем конфигурации сервера.

...