MAXDOP = 1, dicas de consulta e limite de custo para paralelismo

11

Se uma instância foi MAXDOPdefinida como 1 e as dicas de consulta são usadas para permitir que consultas específicas fiquem paralelas, o valor do Limite de custo para paralelismo ainda é usado pelo SQL para decidir se deve ou não ficar paralelo?

Não consegui desenterrar essas informações específicas, embora esse link sugira que o CTFP seja ignorado se MAXDOPfor 1. Isso faz sentido sem sugestões de consulta, pois nenhuma solicitação, independentemente do custo, ficará paralela quando MAXDOPfor 1.

Alguém pode me informar qual será o comportamento esperado desses dois pedidos?

Exemplo 1:

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

Exemplo 2:

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

Respostas:

20

Se uma instância foi MAXDOPdefinida como 1 e as dicas de consulta são usadas para permitir que consultas específicas fiquem paralelas, o valor do Limite de custo para paralelismo ainda é usado pelo SQL para decidir se deve ou não ficar paralelo?

Resposta simples: sim .

Detalhes

Há algumas coisas separadas acontecendo aqui, as quais é importante separar:

  1. Qual é o grau máximo efetivo de paralelismo disponível para uma consulta?

    Os contribuidores para isso são (geralmente em ordem de importância):

    • MAX_DOPConfiguração do Administrador de Recursos
    • MAXDOPConfiguração de dica de consulta
    • A max degree of parallelismopção de configuração da instância

    Os detalhes são explicados na configuração "Máximo grau de paralelismo" do servidor, MAX_DOP do Administrador de Recursos e dica de consulta MAXDOP - qual deles deve usar o SQL Server? por Jack Li, engenheiro sênior de escalonamento do serviço e suporte ao cliente do Microsoft SQL Server. A tabela abaixo é reproduzida a partir desse link:

    tabela de paralelismo

  2. Um plano de consulta usará paralelismo?

    O otimizador de consulta do SQL Server sempre encontra primeiro um plano serial *.

    Então se:

    • Mais otimização é justificada; e
    • O custo do melhor plano serial excede o cost threshold for parallelismvalor de configuração


    ... o otimizador tentará encontrar um plano paralelo.

    Então se:

    • Um plano paralelo é encontrado (ou seja, é possível); e
    • O custo do plano paralelo é menor que o melhor plano serial


    ... um plano paralelo será produzido.

Nota: o cost threshold for parallelismúnico afeta se o otimizador procura um plano paralelo. Depois que um plano paralelo é armazenado em cache, ele é executado usando paralelismo quando for reutilizado (desde que os encadeamentos estejam disponíveis) independentemente da configuração do CTFP.


Exemplos

Nos dois exemplos, com a instância maxdop 1 e a dica de consulta maxdop 2, o DOP disponível efetivo é 2. Se um plano paralelo for escolhido, ele usará o DOP 2.

Exemplo 1

Dado o CTFP de 50 e um plano serial mais barato encontrado, o custo de 30, o SQL Server não tentará encontrar um plano paralelo. Um plano serial será produzido.

Exemplo 2

Dado o CTFP de 50 e um plano serial mais barato encontrado, o custo de 70, o SQL Server tentará encontrar um plano paralelo. Se esse plano (se encontrado) tiver um custo menor que 70 (o custo do plano serial), um plano paralelo será produzido.


O resultado final da otimização de consulta é sempre um único plano em cache: serial ou paralelo. O otimizador encontra apenas um plano serial nas fases de pesquisa0 (TP) e pesquisa1 (QP).

Ela pode , em seguida, (como descrito) executar re- search1 com um requisito para a produção de um plano paralelo. Em seguida, é feita uma escolha entre serial e paralelo, com base no melhor custo de todo o plano até agora. Essa opção é vinculativa no caso de a otimização passar para a search2 (Otimização completa). Cada fase da otimização considera muitas alternativas, mas a saída de um estágio é sempre um único plano melhor, que é serial ou paralelo.

Escrevi sobre isso no Myth: SQL Server armazena em cache um plano serial com todos os planos paralelos

Paul White 9
fonte
2

Exemplo 1 Instância Maxdop: 1 CTFP: 50 Dica de consulta: Maxdop = 2 Custo de consulta: 30

A dica da consulta MAXDOP substitui o nível máximo da instância da configuração de paralelismo, mas como o CTPF é 50 e o custo da consulta é 30, pode ser o plano serial.

Exemplo 2 Maxdop da instância: 1 CTFP: 50 Dica da consulta: Maxdop = 2 Custo da consulta: 70

Aqui, novamente, o grau máximo de paralelismo será tomado como 2, pois a dica MAXDOP está lá, mas o CTFP será tomado como 50 e a consulta, se possível, como Paulo mencionado, pode ser executada em paralelo.

Se uma instância tiver MAXDOP definido como 1 e as dicas de consulta forem usadas para permitir que consultas específicas fiquem paralelas, o valor do Limite de custo para paralelismo ainda será usado pelo SQL para decidir se deve ou não ficar paralelo?

A dica MAXDOP substituirá a configuração ampla da instância do grau máximo de paralelismo.

Citando a partir da dica do MAXDOP docs.microsoft

Número MAXDOP Aplica-se a: SQL Server 2008 a SQL Server 2017.

Substitui a opção de configuração de grau máximo de paralelismo de sp_configure e Resource Governor para a consulta que especifica esta opção. A dica de consulta MAXDOP pode exceder o valor configurado com sp_configure. Se MAXDOP exceder o valor configurado com o Administrador de Recursos, o Mecanismo de Banco de Dados utilizará o valor MAXDOP do Administrador de Recursos,

Shanky
fonte