Степен на паралелизъм, Microsoft Docs

SQL Server автоматично открива най-високата степен на паралелизъм за всеки екземпляр на паралелно изпълнение на заявка или индекс на DDL операция. Това се прави въз основа на следните критерии.

Дали SQL Server работи на компютър, който има повече от един микропроцесор или CPU (като компютър със симетричен мултипроцесор (SMP).

Само компютри с повече от един процесор могат да използват паралелни заявки.

Има ли достатъчно налични потоци.

Всяка операция на заявка или индекс изисква определен брой нишки да бъдат изпълнени. Паралелният план изисква повече нишки за изпълнение от последователния план и броят на заявените нишки се увеличава с увеличаване на степента на паралелизъм. Когато изискването за нишки на паралелен план за определена степен на паралелизъм не може да бъде изпълнено, Database Engine намалява степента на паралелизъм автоматично или напълно изоставя паралелния план в указания контекст на работно натоварване. В този случай започва изпълнението на последователния план (единична нишка).

Типът на извършваната заявка или операция с индекс.

Индексните операции, които създават или възстановяват индекс или премахват клъстерен индекс и интензивни заявки за цикъл на процесора, са най-добрите кандидати за паралелен план. Например големите обединения на таблици, големите агрегати и сортирането на големи набори от резултати са добри кандидати. Простите заявки, често срещани в приложенията за обработка на транзакции, намират допълнителната координация, необходима за паралелно изпълнение на заявката, надвишаваща потенциалното увеличение на производителността. Да сеЗа да разграничи заявките, които се възползват от паралелизма, и заявките, които не го правят, Database Engine сравнява прогнозната цена на заявката или операцията на индекса, която трябва да бъде извършена, спрямо прага на разходите за паралелизъм. Въпреки че не се препоръчва, потребителите могат да променят стойността по подразбиране от 5 с помощта на sp_configure.

Дали броят на редовете за обработка е достатъчен.

Ако оптимизаторът на заявки определи, че броят на редовете е твърде малък, тогава той не вмъква оператори за конвертиране на валута, за да разпространява редове. Следователно отчетите се обработват последователно. Обработката на отчети в последователен план избягва сценарии, при които разходите за стартиране, разпространение и координиране надхвърлят ползите, постигнати чрез паралелна обработка на отчет.

Дали са налични статистически данни за разпространението.

Ако най-високата степен на едновременност не е възможна, се разглеждат по-ниски степени, преди паралелният план да бъде отхвърлен.

Например статистическите данни за разпространението не могат да бъдат изчислени при създаване на клъстериран индекс в изглед, тъй като клъстерираният индекс все още не съществува. В този случай Database Engine не може да осигури най-високата степен на паралелизъм за операцията с индекса. Въпреки това, някои оператори, като например сортиране и сканиране, все още могат да се възползват от паралелната обработка.

Забележка

Операциите с паралелен индекс са налични само в SQL Server Developer Edition, Evaluation Edition и Enterprise Edition.

По време на изпълнение Database Engine определя дали текущото системно натоварване и конфигурация, описани по-рано, са разрешени за паралелно изпълнение. Акопаралелното изпълнение е гарантирано, Database Engine задава оптималния брой нишки и разпределя изпълнението на паралелния план между тези нишки. Когато дадена заявка или операция с индекс започне да се изпълнява на множество нишки за паралелно изпълнение, се използват същия брой нишки, докато операцията бъде завършена. Database Engine проверява отново оптималния брой решения за нишки всеки път, когато извлича план за изпълнение от кеша на процедурите. Например, едно изпълнение на заявка може да доведе до сериен план, последващо изпълнение на същата заявка може да доведе до паралелен план, използващ три нишки, а третото изпълнение може да доведе до паралелен план, използващ четири нишки.

В план за изпълнение на паралелни заявки операторите за вмъкване, актуализиране и изтриване се обработват последователно. Въпреки това, клаузата WHERE на оператор UPDATE или DELETE, или частта SELECT на оператор INSERT, могат да се обработват паралелно. В този случай промените в действителните данни се прилагат последователно към базата данни.

Статичните и управляваните от ключове курсори могат да бъдат попълнени от паралелни планове за изпълнение. Поведението на динамичните курсори обаче може да се поддържа само чрез последователно изпълнение. Оптимизаторът на заявки винаги генерира последователен план за изпълнение за заявка, която е част от динамичен курсор.

Предефиниране на степени на паралелизъм

За да ограничите броя на процесорите, които да използвате в план за паралелно изпълнение, можете да използвате опцията за конфигурация на сървъра за максимална степен на паралелизъм. За оператори за единична заявка и операции с индекс, опциятамаксимална степен на паралелизъм може да бъде заменена чрез указванеподсказка за заявка MAXDOP или параметър на индекс MAXDOP. Опцията MAXDOP осигурява по-добър контрол върху отделни заявки и операции с индекси. Например, можете да използвате опцията MAXDOP, за да контролирате дали увеличавате или намалявате броя на процесорите, предназначени за дадена индексна операция в мрежата. По този начин е възможно да се балансират ресурсите, използвани от операцията на индекса, с тези текущи потребители. Като зададете конфигурационния параметър на сървърамаксимална степен на паралелизъм на 0, можете да конфигурирате SQL Server да използва всички налични процесори (до 64) при изпълнение на паралелни планове. Като зададете конфигурационния параметър на сървъра MAXDOP на 0 за заявки и индекси, можете да конфигурирате SQL Server да използва всички налични процесори (до 64), когато изпълнява паралелни планове срещу дадени заявки или индекси.