Olá, Pessoal,
Hoje gostaria de apresentar o Paralelismo e explicar melhor suas principais configurações dentro do SQL Server.
Para começar, é importante entendermos o que é o Paralelismo no SQL. De maneira simples, podemos dizer que é quando uma query é dividida em pedaços menores, que serão distribuídos para diferentes processadores, diminuindo, assim, o esforço individual de um processador, e, idealmente, agilizando a velocidade de execução da query.
Entendendo essa base podemos partir para a configuração do Cost Threshold for Parallelism e do MaxDOP.
Cost Threshold for Parallelism
Essa configuração é responsável por determinar se uma query está apta a utilizar o paralelismo e funciona da seguinte maneira. Toda query no SQL tem um custo, que é um valor baseado no I/O e no uso de CPU. O Cost Threshold atribui um valor mínimo de custo para que o Paralelismo possa acontecer.
No exemplo abaixo, temos uma query com o custo estimado de 1300. Vemos que, ao utilizar um Cost Threshold inferior a esse valor, o SQL vai utilizar o paralelismo nessa consulta.
Já ao configurarmos o Cost para ser maior que o custo da query, o SQL não irá considerar utilizar o Paralelismo.
“Então qualquer query com custo maior que o Threshold vai utilizar o Paralelismo?"
A resposta para essa pergunta é não. A configuração apenas permite que o SQL avalie a possibilidade de utilizar, nem sempre, rodar a query em paralelo irá obter melhor performance, há cenários que o SQL simplesmente não irá utilizar porque detectou isso, mas existem outros fatores que inibem de fato o uso do Paralelismo.
Exemplos desses fatores são:
Se o plano de execução é complexo o suficiente para que o uso do Paralelismo seja benéfico;
Se a consulta precisa ser executada de forma sequencial (ou seja, não pode ser quebrada em pedaços menores e depois “colada”, como alguns operadores do plano de execução, operador “TOP”)
Etc.
Portanto, ao ver que uma query de custo maior que o Threshold não utilizou paralelismo, não necessariamente algo está errado, mas se você acredita que o paralelismo iria ajudar, seria legal entender o porquê e vê se existe outro caminho para rodar em paralelo.
E para fazer a configuração desse valor é muito simples. O primeiro passo é ir à instância que queremos modificar.
Botão direito na instância > “Properties”.
Clique em “Advanced” no canto esquerdo.
No fim da página temos a área de Parallelism. Clique em Cost Threshold for Parallelism e insira o valor desejado.
Por recomendação da Microsoft, temos como base o valor padrão 5, mas o ideal é testar valores diferentes e ver como o seu servidor se comporta com esses valores. O valor 50 costuma ser um bom ponto de partida
Max Degree of Parallelism
Outra configuração que temos é o MaxDOP, que define o número máximo de processadores que podem ser usados em paralelo por uma query.
Depois de configurado o Cost Threshold é importante também verificar o MaxDOP, se ele está configurado de maneira correta.
Para isso, é importante entender algumas coisas sobre o MaxDOP:
Ele é um valor que vai de 0 a 32.767
Sendo 0 o valor que permite que o SQL utilize todos os processadores disponíveis, não é recomendado o uso.
Outros valores acima de 0 vão limitar a consulta para aquele número de CPUs (se configurar em 1 as queries do meu ambiente não irão rodar em paralelo)
A recomendação da Microsoft a partir do SQL 2016 está representada na tabela abaixo.
Agora que sabemos as recomendações podemos ir para o SQL configurar o MaxDOP.
Botão Direito na sua instância e clique em “Properties”.
Clique em “Advanced” no canto esquerdo.
No fim da página temos a área de Parallelism, clique em Max Degree of Parallelism e insira o valor desejado.
Conclusão
Resumindo, no post de hoje, vimos paralelismo e suas configurações dentro do SQL Server, a quantidade de processadores que irá ser utilizada para uma query que rode em paralelo, e também os valores para que essa query possa rodar em paralelo.
Lembrando que o intuito do post é apenas apresentar as funções, para que servem e algumas recomendações de configurações.
O mais importante ainda é conhecer o servidor que está sendo configurado, se há a necessidade de alterar alguma configuração e se as recomendações da Microsoft apresentadas aqui são as melhores para o caso específico.