Se uma instância foi MAXDOP
definida 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:
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_DOP
Configuração do Administrador de Recursos
MAXDOP
Configuração de dica de consulta
- A
max degree of parallelism
opçã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:
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 parallelism
valor 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