Jeśli wystąpienie MAXDOP
ustawiono na 1, a podpowiedzi zapytań są używane, aby określone zapytania mogły być równoległe, to czy wartość progowa kosztu równoległości jest nadal używana przez SQL do podjęcia decyzji, czy faktycznie iść równolegle?
Prosta odpowiedź: tak .
Detale
Dzieje się tutaj kilka osobnych rzeczy, które należy oddzielić:
Jaki jest efektywny maksymalny stopień równoległości dostępny dla zapytania?
Przyczyniają się do tego (ogólnie według ważności):
MAX_DOP
Ustawienie Resource Governor
MAXDOP
Ustawienie podpowiedzi do zapytania
max degree of parallelism
Opcja konfiguracji wystąpienie
Szczegóły wyjaśniono w ustawieniu „Maksymalny stopień równoległości” serwera, w MAX_DOP Resource Governor i podpowiedzi MAXDOP - z których należy korzystać SQL Server? autor: Jack Li, starszy inżynier ds. eskalacji w dziale obsługi klienta Microsoft SQL Server. Poniższa tabela została odtworzona z tego linku:
Czy plan zapytań będzie korzystał z równoległości?
Optymalizator zapytań programu SQL Server zawsze znajduje najpierw plan szeregowy *.
A następnie, jeśli:
- Dalsza optymalizacja jest uzasadniona; i
- Koszt najlepszego planu szeregowego przekracza
cost threshold for parallelism
wartość konfiguracji
... optymalizator spróbuje znaleźć plan równoległy.
A następnie, jeśli:
- Znaleziono równoległy plan (tzn. Jest możliwy); i
- Koszt planu równoległego jest niższy niż najlepszy plan szeregowy
... zostanie opracowany plan równoległy.
Uwaga:cost threshold for parallelism
tylko wpływa na wygląd czy optymalizator dla równoległego planu. Po buforowaniu planu równoległego zostanie on wykonany przy użyciu równoległości, gdy zostanie ponownie użyty (o ile dostępne są wątki), niezależnie od ustawienia CTFP.
Przykłady
W obu przykładach, z instancją maxdop 1 i wskazówką dotyczącą zapytania maxdop 2, efektywnym dostępnym DOP jest 2. Jeśli zostanie wybrany plan równoległy, użyje DOP 2.
Przykład 1
Biorąc pod uwagę CTFP 50 i najtańszy plan szeregowy znaleziony koszt 30, SQL Server nie będzie próbował znaleźć planu równoległego. Zostanie opracowany plan szeregowy.
Przykład 2
Biorąc pod uwagę CTFP 50 i najtańszy plan szeregowy znaleziony koszt 70, SQL Server spróbuje znaleźć plan równoległy. Jeśli ten plan (jeśli zostanie znaleziony) ma koszt mniejszy niż 70 (koszt planu szeregowego), zostanie opracowany plan równoległy.
Końcowym rezultatem optymalizacji zapytania jest zawsze pojedynczy plan buforowany: szeregowy lub równoległy. Optymalizator znajduje tylko plan szeregowy w fazach search0 (TP) i search1 (QP).
Następnie może (zgodnie z opisem) ponownie uruchomić wyszukiwanie1 z wymogiem stworzenia planu równoległego. Następnie dokonuje się wyboru między serią a równoległością w oparciu o jak dotąd najlepsze koszty całego planu. Ten wybór jest wiążący w przypadku, gdy optymalizacja przejdzie do search2 (pełna optymalizacja). Każda faza optymalizacji rozważa wiele alternatyw, ale wyjście ze etapu jest zawsze pojedynczym najlepszym planem, szeregowym lub równoległym.
Pisałem o niektórych z nich w Myth: SQL Server buforuje plan szeregowy z każdym planem równoległym