MAXDOP = 1, подсказки к запросу и порог стоимости для параллелизма

11

Если для экземпляра MAXDOPзадано значение 1, а подсказки запросов используются для параллельного выполнения определенных запросов, является ли значение порога стоимости для параллелизма все еще используемым SQL для принятия решения о том, следует ли на самом деле идти параллельно?

Я не смог получить эту конкретную информацию, хотя эта ссылка предполагает, что CTFP игнорируется, если MAXDOPравен 1. Это имеет смысл без подсказок запроса, поскольку ни один запрос, независимо от стоимости, не будет идти параллельно, когда MAXDOPравен 1.

Может кто-нибудь сообщить мне, каково будет ожидаемое поведение этих двух запросов?

Пример 1:

Instance Maxdop: 1 
CTFP: 50 
Query hint: Maxdop=2 
Query cost: 30

Пример 2:

Instance Maxdop: 1
CTFP: 50
Query hint: Maxdop=2
Query cost: 70
Мартин Банси
источник

Ответы:

20

Если для экземпляра MAXDOPзадано значение 1, а подсказки запросов используются для параллельного выполнения определенных запросов, является ли значение порога стоимости для параллелизма все еще используемым SQL для принятия решения о том, следует ли на самом деле идти параллельно?

Простой ответ: да .

подробности

Здесь происходит несколько отдельных вещей, которые важно отделить:

  1. Какова эффективная максимальная степень параллелизма, доступная для запроса?

    Вкладчики в это (в целом в порядке важности):

    • MAX_DOPНастройка регулятора ресурсов
    • MAXDOPНастройка подсказки запроса
    • Параметр max degree of parallelismконфигурации экземпляра

    Подробности объясняются в параметре «Максимальная степень параллелизма» сервера, в MAX_DOP регулятора ресурсов и в подсказке к запросу MAXDOP - какой из них следует использовать SQL Server? Джек Ли, старший инженер по эскалации обслуживания и поддержки клиентов Microsoft SQL Server. Таблица ниже воспроизводится по этой ссылке:

    таблица параллелизма

  2. Будет ли план запроса использовать параллелизм?

    Оптимизатор запросов 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 кэширует последовательный план с каждым параллельным планом

Пол Уайт 9
источник
2

Пример 1 Экземпляр Maxdop: 1 CTFP: 50 Подсказка к запросу: Maxdop = 2 Стоимость запроса: 30

Подсказка запроса MAXDOP переопределяет максимальную степень установки параллелизма в ширину, но поскольку CTPF равен 50, а стоимость запроса равна 30, он может пойти на последовательный план.

Пример 2 Экземпляр Maxdop: 1 CTFP: 50 Подсказка к запросу: Maxdop = 2 Стоимость запроса: 70

Здесь снова максимальная степень параллелизма будет принята за 2, так как подсказка MAXDOP есть, но CTFP будет принят за 50 и запрос, если возможно, как упоминал Пол, может выполняться параллельно.

Если для экземпляра MAXDOP задано значение 1, а подсказки запросов используются для разрешения параллельного выполнения определенных запросов, то значение SQL порога стоимости для параллелизма все еще используется SQL для принятия решения о том, идти ли на самом деле параллельно?

Подсказка MAXDOP будет переопределять настройку параметра max для максимальной степени параллелизма.

Цитирование из MAXDOP подсказка docs.microsoft

Номер MAXDOP Относится к: SQL Server 2008 через SQL Server 2017.

Переопределяет параметр конфигурации максимальной степени параллелизма sp_configure и регулятора ресурсов для запроса, указывающего этот параметр. Подсказка запроса MAXDOP может превышать значение, настроенное с помощью sp_configure. Если MAXDOP превышает значение, настроенное с помощью регулятора ресурсов, компонент Database Engine использует значение MAXDOP регулятора ресурсов,

Shanky
источник