Processamento paralelo de consultas

O SQL Server fornece consultas paralelas para otimizar a execução de consultas e operações de índice para computadores que têm mais de um microprocessador (CPU). Como o SQL Server pode executar uma consulta ou uma operação de índice em paralelo usando vários threads do sistema operacional, a operação pode ser executada de forma rápida e eficiente.

Durante a otimização da consulta, SQL Server procura consultas ou operações de índice que poderiam se beneficiar da execução paralela. Para essas consultas, o SQL Server insere operadores de troca no plano de execução de consulta para preparar a consulta para a execução paralela. Um operador de troca é um operador em um plano de execução de consulta que fornece gerenciamento de processo, redistribuição de dados e controle de fluxo. O operador de troca inclui como subtipos os operadores lógicos Distribute Streams, Repartition Streams e Gather Streams dos quais um ou mais podem aparecer na saída do Plano de Execução de um plano de consulta para uma consulta paralela.

Depois que os operadores de troca são inseridos, o resultado é um plano de execução da consulta paralela. Um plano de execução de consulta paralela pode usar mais de um thread. Um plano de execução em série, usado por uma consulta não paralela, usa só um thread para sua execução. O número real de threads usado por uma consulta paralela é determinado na inicialização da execução do plano de consulta e é determinado pela complexidade do plano e pelo grau de paralelismo. O grau de paralelismo determina o número máximo de CPUs que estão sendo usadas; não significa o número de threads que estão sendo usados. O valor do grau de paralelismo é definido no nível de servidor e pode ser modificado usando-se o procedimento armazenado no sistema sp_configure. Esse valor pode ser substituído por consulta individual ou instruções de índice especificando-se a dica de consulta MAXDOP ou a opção de índice MAXDOP.

O otimizador de consultas do SQL Server não usa um plano de execução paralela para uma consulta se alguma das condições a seguir for verdadeira:

  • O custo de execução em série da consulta não é suficientemente alto para se considerar um plano de execução paralelo alternativo.

  • Um plano de execução em série é considerado mais rápido que qualquer plano de execução paralelo possível para a consulta em questão.

  • A consulta contém operadores escalares ou relacionais que não podem ser executados em paralelo. Certos operadores podem fazer com que uma seção do plano de consulta seja executada no modo em série ou que todo o plano seja executado no modo em série.