MAXDOP = 1, suggerimenti per le query e soglia di costo per il parallelismo


11

Se un'istanza è MAXDOPimpostata su 1 e gli hint di query vengono utilizzati per consentire a query specifiche di andare in parallelo, il valore Soglia di costo per parallelismo è ancora utilizzato da SQL per decidere se andare effettivamente in parallelo?

Non sono stato in grado di scavare queste informazioni specifiche anche se questo link suggerisce che CTFP viene ignorato se MAXDOPè 1. Questo ha senso senza suggerimenti di query in quanto nessuna richiesta, indipendentemente dal costo, andrà in parallelo quando MAXDOPè 1.

Qualcuno può farmi sapere quale sarà il comportamento previsto di queste due richieste?

Esempio 1:

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

Esempio 2:

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

Risposte:


20

Se un'istanza è MAXDOPimpostata su 1 e gli hint di query vengono utilizzati per consentire a query specifiche di andare in parallelo, il valore Soglia di costo per parallelismo è ancora utilizzato da SQL per decidere se andare effettivamente in parallelo?

Risposta semplice: .

Dettagli

Ci sono un paio di cose separate in corso qui, che è importante separare:

  1. Qual è il grado massimo di parallelismo effettivo disponibile per una query?

    I partecipanti a questo sono (sostanzialmente in ordine di importanza):

    • MAX_DOPImpostazione del Resource Governor
    • MAXDOPImpostazione suggerimento query
    • L' max degree of parallelismopzione di configurazione dell'istanza

    I dettagli sono spiegati nell'impostazione "Max Degree of Parallelism" del server, MAX_DOP di Resource Governor e suggerimento per le query MAXDOP - quale dovrebbe essere usato da SQL Server? di Jack Li, Senior Escalation Engineer per Microsoft SQL Server Servizio clienti. La tabella seguente è riprodotta da quel link:

    tabella di parallelismo

  2. Un piano di query utilizzerà il parallelismo?

    Query Optimizer di SQL Server trova sempre prima un piano seriale *.

    Quindi, se:

    • Un'ulteriore ottimizzazione è giustificata; e
    • Il costo del miglior piano seriale supera il cost threshold for parallelismvalore di configurazione


    ... l'ottimizzatore proverà a trovare un piano parallelo.

    Quindi, se:

    • È stato trovato un piano parallelo (cioè è possibile); e
    • Il costo del piano parallelo è inferiore al miglior piano seriale


    ... verrà prodotto un piano parallelo.

Nota: l' cost threshold for parallelismunico effetto se l'ottimizzatore cerca un piano parallelo. Una volta memorizzato nella cache un piano parallelo, verrà eseguito utilizzando il parallelismo quando viene riutilizzato (purché siano disponibili thread) indipendentemente dall'impostazione CTFP.


Esempi

Per entrambi gli esempi, con istanza maxdop 1 e suggerimento query maxdop 2, il DOP disponibile effettivo è 2. Se viene scelto un piano parallelo, utilizzerà DOP 2.

Esempio 1

Dato CTFP di 50 e un piano seriale più economico trovato costo di 30, SQL Server non proverà a trovare un piano parallelo. Verrà prodotto un piano seriale.

Esempio 2

Dato CTFP di 50 e un piano seriale più economico trovato costo di 70, SQL Server proverà a trovare un piano parallelo. Se questo piano (se trovato) ha un costo inferiore a 70 (il costo del piano seriale) verrà prodotto un piano parallelo.


Il risultato finale dell'ottimizzazione delle query è sempre un singolo piano memorizzato nella cache: seriale o parallelo. L'ottimizzatore trova solo un piano seriale nelle fasi search0 (TP) e search1 (QP).

Si può allora (come descritto) rieseguire search1 con un requisito di produrre un piano parallelo. Viene quindi fatta una scelta tra seriale e parallelo sulla base del miglior costo dell'intero piano finora. Tale scelta è vincolante nel caso in cui l'ottimizzazione passi a search2 (Ottimizzazione completa). Ogni fase di ottimizzazione considera molte alternative, ma l'output da uno stage è sempre un singolo piano migliore, che è seriale o parallelo.

Di questo ho scritto in Myth: SQL Server memorizza nella cache un piano seriale con ogni piano parallelo


2

Esempio 1 Istanza Maxdop: 1 CTFP: 50 Suggerimento query: Maxdop = 2 Costo query: 30

Il suggerimento della query MAXDOP ha la precedenza sul massimo grado di parallelismo impostando l'istanza su larga scala, ma poiché CTPF è 50 e il costo della query è 30, può andare per il piano seriale.

Esempio 2 Istanza Maxdop: 1 CTFP: 50 Suggerimento query: Maxdop = 2 Costo query: 70

Anche in questo caso il massimo grado di parallelismo sarà preso come 2 poiché il suggerimento MAXDOP è presente ma CTFP sarà preso come 50 e interrogherà, se possibile come Paul citato potrebbe funzionare in parallelo.

Se un'istanza ha MAXDOP impostato su 1 e i suggerimenti di query vengono utilizzati per consentire a query specifiche di andare in parallelo, il valore Soglia di costo per parallelismo è ancora utilizzato da SQL per decidere se andare effettivamente in parallelo?

Il suggerimento MAXDOP sovrascriverà l'impostazione ampia dell'istanza del massimo grado di parallelismo.

Citando da MAXDOP suggerimento docs.microsoft

Numero MAXDOP Si applica a: da SQL Server 2008 a SQL Server 2017.

Sovrascrive l'opzione di configurazione del massimo grado di parallelismo di sp_configure e Resource Governor per la query che specifica questa opzione. Il suggerimento per la query MAXDOP può superare il valore configurato con sp_configure. Se MAXDOP supera il valore configurato con Resource Governor, Motore di database utilizza il valore MAXDOP di Resource Governor,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.