Grau de paralelismo

O SQL Server detecta automaticamente o melhor grau de paralelismo para cada instância de uma execução de consulta paralela ou operação DDL (linguagem de definição de dados) do índice. Isso é feito baseado nos seguintes critérios:

  1. Se o SQL Server estiver sendo executado em um computador que tenha mais de um microprocessador ou mais de uma CPU, como um computador SMP (multiprocessamento simétrico).

    Apenas computadores que têm mais de uma CPU podem usar consultas paralelas.

  2. Se houver threads suficientes disponíveis.

    Cada operação de consulta ou índice exige um determinado número de threads para execução. A execução de um plano paralelo exige mais threads que um plano consecutivo, e o número de threads exigidos aumenta com o grau de paralelismo. Quando o requisito de thread do plano paralelo de um grau específico de paralelismo não puder ser atendido, o Mecanismo de Banco de Dados diminuirá automaticamente o grau de paralelismo ou abandonará completamente o plano paralelo no contexto de carga de trabalho especificado. Depois, ele executará o plano consecutivo (um thread).

  3. O tipo de operação de consulta ou de índice executada.

    As operações de índice que criam ou reconstroem um índice, ou descartam um índice cluster e as consultas que usam ciclos de CPU frequentemente são as melhores opções para um plano paralelo. Por exemplo, junções de tabelas grandes, agregações grandes e classificação de conjuntos de resultados grandes são boas alternativas. As consultas simples, frequentemente encontradas em aplicativos de processamento de transações, localizam a coordenação adicional exigida para executar uma consulta em paralelo que supera o aumento de desempenho potencial. Para distinguir as consultas que se beneficiam de paralelismo das que não se beneficiam, o Mecanismo de Banco de Dados compara o custo estimado da execução da operação de consulta ou índice com o valor cost threshold for parallelism. Embora não recomendado, os usuários podem alterar o valor padrão, 5 usando sp_configure.

  4. Se houver um número suficiente de linhas para processar.

    Se o otimizador de consulta determinar que o número de linhas é muito baixo, não apresentará os operadores de troca para distribuir as linhas. Por conseguinte, os operadores serão executados em série. A execução dos operadores em um plano consecutivo evita cenários quando os custos de inicialização, distribuição e coordenação excedem os ganhos alcançados pela execução de operador paralela.

  5. Se as estatísticas de distribuição atuais estiverem disponíveis.

    Se o grau mais alto de paralelismo não for possível, os graus inferiores serão considerados antes de o plano paralelo ser abandonado.

    Por exemplo, quando você criar um índice cluster em uma exibição, não poderão ser avaliadas estatísticas de distribuição, porque o índice cluster ainda não existirá. Nesse caso, o Mecanismo de Banco de Dados não poderá fornecer o grau mais alto de paralelismo para a operação de índice. Porém, alguns operadores, como de classificação e verificação, ainda poderão se beneficiar da execução paralela.

ObservaçãoObservação

As operações de índice paralelas somente estão disponíveis nas edições Enterprise, Developer e Evaluation do SQL Server.

No tempo de execução, o Mecanismo de Banco de Dados determina se as informações de carga de trabalho de sistema atual e de configuração previamente descritas permitem a execução paralela. Se a execução paralela estiver garantida, o Mecanismo de Banco de Dados determinará o número ideal de threads e espalhará a execução do plano paralelo por esses threads. Quando uma operação de consulta ou índice for iniciada executando em threads múltiplos para execução paralela, o mesmo número de threads será usado até que a operação seja concluída. O Mecanismo de Banco de Dados reexamina o número ideal de decisões de thread sempre que um plano de execução for recuperado do cache de procedimento. Por exemplo, uma execução de uma consulta pode resultar no uso de um plano consecutivo, uma execução posterior da mesma consulta pode resultar em um plano paralelo que usa três threads, e uma terceira execução pode resultar em um plano paralelo que usa quatro threads.

Em um plano de execução de consulta paralelo, os operadores de inserção, atualização e exclusão são executados em série. Porém, a cláusula WHERE de uma instrução UPDATE ou DELETE, ou a parte SELECT de uma instrução INSERT pode ser executada em paralelo. As alterações de dados reais são, depois, aplicadas em série ao banco de dados.

Cursores estáticos e controlados por conjunto de chaves podem ser populados por planos de execução paralelos. Porém, o comportamento dos cursores dinâmicos só pode ser fornecido por meio da execução consecutiva. O otimizador de consulta sempre gera um plano de execução consecutivo para uma consulta que faz parte de um cursor dinâmico.

Substituindo graus de paralelismo

Você pode usar a opção de configuração de servidor max degree of parallelism para limitar o número de processadores a serem usados na execução do plano paralelo. A opção max degree of parallelism pode ser substituída por instruções de operação de índice e de consulta individual, especificando a dica de consulta MAXDOP ou a opção de índice MAXDOP. MAXDOP fornece mais controle sobre operações de índice e consultas individuais. Por exemplo, você pode usar a opção MAXDOP para controlar, estendendo ou reduzindo, o número de processadores dedicado a uma operação de índice online. Desse modo, você pode equilibrar os recursos usados por uma operação de índice com os dos usuários simultâneos. A definição da opção max degree of parallelism como 0 permite que o SQL Server use todos os processadores disponíveis, no máximo 64, em uma execução de plano paralelo. A definição de MAXDOP como 0 para consultas e índices permite que o SQL Server use todos os processadores disponíveis, no máximo 64, para as consultas ou índices especificados em uma execução de plano paralela.