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 (вартість послідовного плану), то буде виготовлений паралельний план.


Кінцевим результатом оптимізації запитів є завжди один кешований план: послідовний або паралельний. Оптимізатор знаходить лише послідовний план у фазах пошуку0 (TP) та search1 (QP).

Потім може (як описано) повторно запустити пошук1 з вимогою створити паралельний план. Тоді робиться вибір між послідовними та паралельними, виходячи з найкращої досі вартості плану. Цей вибір є обов'язковим у випадку, якщо оптимізація перейде до пошуку2 (Повна оптимізація). Кожна фаза оптимізації розглядає безліч альтернатив, але вихід зі стадії завжди є найкращим планом, який є або послідовним, або паралельним.

Про щось із цього я писав у Myth: SQL Server кешує послідовний план з кожним паралельним планом


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 для того, щоб вирішити, чи дійсно йти паралельно чи ні?

Підказка MAXDOP перекриє встановлену на максимум паралелізм екземпляра.

Цитування з підказки MAXDOP docs.microsoft

Номер MAXDOP Застосовується для: SQL Server 2008 до SQL Server 2017.

Перевіряє параметр конфігурації максимуму паралелізму sp_configure та Resource Governor для запиту із зазначенням цього параметра. Підказка MAXDOP запиту може перевищувати значення, налаштоване sp_configure. Якщо MAXDOP перевищує значення, налаштоване за допомогою Governor Resource, Engine Database використовує значення MAXDOP Governor Resource,

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.