Если для экземпляра MAXDOP
задано значение 1, а подсказки запросов используются для параллельного выполнения определенных запросов, является ли значение порога стоимости для параллелизма все еще используемым SQL для принятия решения о том, следует ли на самом деле идти параллельно?
Простой ответ: да .
подробности
Здесь происходит несколько отдельных вещей, которые важно отделить:
Какова эффективная максимальная степень параллелизма, доступная для запроса?
Вкладчики в это (в целом в порядке важности):
MAX_DOP
Настройка регулятора ресурсов
MAXDOP
Настройка подсказки запроса
- Параметр
max degree of parallelism
конфигурации экземпляра
Подробности объясняются в параметре «Максимальная степень параллелизма» сервера, в MAX_DOP регулятора ресурсов и в подсказке к запросу MAXDOP - какой из них следует использовать SQL Server? Джек Ли, старший инженер по эскалации обслуживания и поддержки клиентов Microsoft SQL Server. Таблица ниже воспроизводится по этой ссылке:
Будет ли план запроса использовать параллелизм?
Оптимизатор запросов SQL Server всегда сначала находит последовательный план *.
Тогда, если:
- Дальнейшая оптимизация оправдана; и
- Стоимость лучшего серийного плана превышает
cost threshold for parallelism
стоимость конфигурации
... оптимизатор попытается найти параллельный план.
Тогда, если:
- Параллельный план найден (т.е. возможен); и
- Стоимость параллельного плана меньше, чем лучший серийный план
... будет разработан параллельный план.
Примечание:cost threshold for parallelism
только влияет ли оптимизатор выглядит для параллельного плана. После того как параллельный план будет кэширован, он будет выполняться с использованием параллелизма при повторном использовании (при условии доступности потоков) независимо от настройки CTFP.
Примеры
Для обоих примеров, с экземпляром maxdop 1 и подсказкой запроса maxdop 2, эффективный доступный DOP равен 2. Если выбран параллельный план, он будет использовать DOP 2.
Пример 1
Учитывая, что CTFP равен 50, а самый дешевый последовательный план стоит 30, SQL Server не будет пытаться найти параллельный план. Серийный план будет произведен.
Пример 2
Учитывая CTFP 50 и самый дешевый последовательный план, найденный стоимостью 70, SQL Server попытается найти параллельный план. Если этот план (если он найден) имеет стоимость менее 70 (стоимость серийного плана), то будет создан параллельный план.
Конечным результатом оптимизации запросов всегда является один кэшированный план: последовательный или параллельный. Оптимизатор находит только серийный план на этапах search0 (TP) и search1 (QP).
Затем он может (как описано) повторно запустить search1 с требованием создать параллельный план. Затем делается выбор между последовательным и параллельным, исходя из наилучшей стоимости всего плана. Этот выбор является обязательным в случае, если оптимизация переходит к search2 (Полная оптимизация). Каждый этап оптимизации рассматривает множество альтернатив, но выходные данные этапа всегда представляют собой единый наилучший план, который является последовательным или параллельным.
Я написал об этом в Мифе: SQL Server кэширует последовательный план с каждым параллельным планом