Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 На одном сервере запрос выполняется 1 сек, на другом этот же запрос - 80 секунд - SQL Serv  [new]
ribastar
Member

Откуда:
Сообщений: 8
Добрый день! Есть большущий запрос для формирования отчёта, где-то около 22 джоинов, сам запрос не важно даже какой. На одном сервере он выполняется 1 секунду, а на другом - 80 секунд. (В выборке 150 строк всего).

На сервере, где скорость равна 1 секунде, план запросов показывает, что все соединения идут Nested loop`ами и без распараллеливания. На втором сервере, где 80 секунд, план запроса показывает, что почти все соединения идут через Hash join и сам запрос распараллелен на 2 работника. Если я на втором сервере добавлю к запросу OPTION (MAXDOP 1), то время выполнения запроса уменьшается до 7 секунд, но это тоже очень очень долго для 150 строк, собираемых из 15 таблиц без сложных фильтров. Думаю если добавить хинты на принудительное использование Nested loops, то всё будет нормально, но это явно не правильное поведение.

Вопрос:
Почему так происходит, что оптимизатор выбирает явно не оптимальную стратегию? Что и где мне можно проверить, какие действия можно выполнить, чтобы второй сервер работал аналогично первому?
12 апр 18, 11:04    [21332456]     Ответить | Цитировать Сообщить модератору
 Re: На одном сервере запрос выполняется 1 сек, на другом этот же запрос - 80 секунд - SQL Serv  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Базы идентичные и настройки для них? Статистика тоже идентичная? TF никакие не включаются? Настройки параллелизма по дефолту? и тд. там можно до бесконечности.

Планы смотреть надо и статистику обновить коль что.
12 апр 18, 11:10    [21332472]     Ответить | Цитировать Сообщить модератору
 Re: На одном сервере запрос выполняется 1 сек, на другом этот же запрос - 80 секунд - SQL Serv  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
ribastar,

и версии серверов конечно одинаковые? Обновите статистики для начала
12 апр 18, 11:22    [21332521]     Ответить | Цитировать Сообщить модератору
 Re: На одном сервере запрос выполняется 1 сек, на другом этот же запрос - 80 секунд - SQL Serv  [new]
ribastar
Member

Откуда:
Сообщений: 8
Всем спасибо, вот что я сделал:
1. Проверил параметры серверов, они отличались, на втором сервере тупо было ограничение оперативной памяти на 4 гб от максимального, отключил ограничение.
2. Отключил в параметрах сервера параметра Use Windows fibers (советуют почти никогда его не использовать)
3. Обновил вручную статистику ключей и индексов

Теперь и планы и время выполнения стали очень похожи!
12 апр 18, 12:03    [21332680]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить