Estou construindo um índice Columnstore agora. A saída de sp_whoisactive
:
Esta é uma máquina de desenvolvimento. Nada mais está em execução. O servidor tem 8 GB de memória disponível para ele. A CPU está quase ociosa. A compilação parece estar na fase de amostragem do dicionário global porque sqlservr.exe
está fazendo IO de disco aleatório e escrevendo quase nada.
Isso SLEEP_TASK
indica que posso tomar medidas para tornar a construção do índice mais rápida? Por que a compilação está "dormindo" às vezes?
Este é o SQL Server 2014 SP1.
SLEEP_TASK Inativo Suspensão Genérica. SLEEP_TASK é uma espera geral, usada para todos os tipos de coisas em que não existe um tipo de espera mais específico, mas surge com operações de hash (junção/agregação) que se espalham para tempdb e, ocasionalmente, em uma troca (operador de paralelismo) onde um consumidor está esperando algo que não é uma espera normal de CXPACKET ou EXECSYNC. Eu verificaria se há vazamentos de hash primeiro SLEEP_TASK Tipo de espera no SQL Server - o que isso indica?
Para ajudar o dicionário global a refletir melhor os dados em toda a tabela, o processo de criação do índice de armazenamento de colunas foi alterado no SQL Server 2014.
Agora ele começa primeiro em um único thread que lê uma seleção de amostras de páginas de dados de toda a tabela para formar um dicionário global para cada coluna; depois disso, a segunda fase começa a usar todos os threads disponíveis para criar o índice columnstore real .
O número de linhas que o SQL Server 2014 irá amostrar ao construir o dicionário global depende do número total de linhas na tabela (“cardinalidade”).
Uma vez que o operador de paralelismo está envolvido, é introduzido o tipo de espera SLEEP_TASK.
Você deve ignorar esse wait_type (o script de paul randal o ignora) até ter resolvido todos os outros tipos de espera importantes.
Abaixo está um trecho do trabalho de pesquisa - (aviso: pdf) :
Leia esta excelente série: Stairway To Columnstore Indexes - Por Hugo Kornelis