MAXDOP = 1, wskazówki zapytania i próg kosztów dla równoległości


11

Jeśli wystąpienie MAXDOPustawiono 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?

Nie byłem w stanie wykopać tych konkretnych informacji, chociaż ten link sugeruje, że CTFP jest ignorowany, jeśli MAXDOPma wartość 1. Ma to sens bez wskazówek zapytania, ponieważ żadne żądanie, niezależnie od kosztu, nie pójdzie równolegle, gdy MAXDOPbędzie 1.

Czy ktoś może dać mi znać, jakie będzie oczekiwane zachowanie tych dwóch wniosków?

Przykład 1:

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

Przykład 2:

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

Odpowiedzi:


20

Jeśli wystąpienie MAXDOPustawiono 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ć:

  1. 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_DOPUstawienie Resource Governor
    • MAXDOPUstawienie podpowiedzi do zapytania
    • max degree of parallelismOpcja 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:

    tabela równoległości

  2. 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 parallelismwartość 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


2

Przykład 1 Instancja Maxdop: 1 CTFP: 50 Wskazówka dotycząca zapytania: Maxdop = 2 Koszt zapytania: 30

Wskazówka dotycząca zapytania MAXDOP zastępuje maksymalny stopień ustawienia instancji równoległości w szerokim zakresie, ale ponieważ CTPF wynosi 50, a koszt zapytania wynosi 30, może to wymagać planu szeregowego.

Przykład 2 Instancja Maxdop: 1 CTFP: 50 Wskazówka dotycząca zapytania: Maxdop = 2 Koszt zapytania: 70

Tutaj ponownie maksymalny stopień równoległości zostanie przyjęty jako 2, ponieważ istnieje wskazówka MAXDOP, ale CTFP zostanie przyjęty jako 50 i zapytanie, jeśli to możliwe, jak wspomniano Paul, może działać równolegle.

Jeśli instancja ma wartość MAXDOP ustawioną na 1, a wskazówki zapytań są używane, aby umożliwić określone zapytania 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?

Wskazówka MAXDOP zastąpi ustawienie maksymalnej instancji równoległości dla całego wystąpienia.

Cytowanie z MAXDOP podpowiedź docs.microsoft

Numer MAXDOP Dotyczy: SQL Server 2008 do SQL Server 2017.

Zastępuje opcję konfiguracji maksymalnego stopnia równoległości sp_configure i Resource Governor dla zapytania określającego tę opcję. Wskazówka dotycząca zapytania MAXDOP może przekraczać wartość skonfigurowaną za pomocą sp_configure. Jeśli MAXDOP przekroczy wartość skonfigurowaną za pomocą Resource Governor, aparat bazy danych użyje wartości MAXDOP Resource Governor,

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.