Operações de índice paralelas

Os planos de consulta criados para as operações de índice que criam ou recriam um índice, ou cancelam um índice clusterizado, permitem operações multithreaded paralelas em computadores que têm vários microprocessadores.

ObservaçãoObservação

As operações de índice paralelas somente estão disponíveis no SQL Server 2008 Enterprise.

O SQL Server usa os mesmos algoritmos para determinar o grau de paralelismo (o número total de threads separados a serem executados) para operações de índice, como faz em outras consultas. O grau máximo de paralelismo para uma operação de índice está sujeito à opção de configuração de servidor max degree of parallelism. É possível substituir o valor do max degree of parallelism para operações de índice individuais definindo a opção de índice MAXDOP nas instruções CREATE INDEX, ALTER INDEX, DROP INDEX e ALTER TABLE.

Quando o Mecanismo de Banco de Dados cria um plano de execução de índice, o número de operações paralelas é definido como o menor valor entre:

  • O número de microprocessadores ou CPUs no computador.

  • O número especificado na opção de configuração de servidor max degree of parallelism.

  • O número de CPUs que ainda não ultrapassou o limite de trabalho executado para threads SQL Server.

Por exemplo, em um computador que tem oito CPUs, mas que o max degree of parallelism está definido como 6, não são gerados mais do que seis threads paralelos para uma operação de índice. Se cinco das CPUs no computador excederem o limite de trabalho do SQL Server quando um plano de execução de índice for criado, o plano de execução especificará somente três threads paralelos.

As fases principais de uma operação de índice paralela incluem o seguinte:

  • Um thread coordenador que examina a tabela rápida e aleatoriamente para calcular a distribuição das chaves do índice. O thread coordenador estabelece os limites de chave que criarão um número de intervalos de chave igual ao grau de operações paralelas, em que cada intervalo de chave é calculado para cobrir números semelhantes de linhas. Por exemplo, se houver quatro milhões de linhas na tabela e o grau de paralelismo for 4, o thread coordenador determinará os valores de chave que delimitam quatro conjuntos de linhas com 1 milhão de linhas em cada conjunto. Se não for possível estabelecer intervalos de chave suficientes para usar todas as CPUs, o grau de paralelismo será reduzido adequadamente.

  • O thread coordenador despacha um número de threads igual para o grau de operações paralelas e espera que esses threads concluam o trabalho deles. Cada thread examina a tabela base usando um filtro que recupera apenas as linhas com valores de chave dentro do intervalo atribuído ao thread. Cada thread cria uma estrutura de índice para as linhas em seu intervalo de chave. No caso de um índice particionado, cada thread cria um número especificado de partições. Não são compartilhadas partições entre threads. Para obter mais informações sobre como um índice é criado, consulte tempdb e criação de índice.

  • Após a conclusão de todos os threads paralelos, o thread coordenador conecta as subunidades de índice em um único índice. Essa fase só se aplica a operações de índice offline.

As instruções CREATE TABLE ou ALTER TABLE individuais podem ter várias restrições que exigem a criação de um índice. Essas operações de criação de vários índices são executadas em série, embora cada operação de criação de índice individual possa ser uma operação paralela em um computador com várias CPUs.