Estou importando uma grande quantidade de dados para um banco de dados vazio e, antes de começar, desabilitei todos os índices não clusterizados não exclusivos para ver se eu poderia melhorar o desempenho da importação.
Agora, quero reativar os índices e estou pensando se há algo que eu possa fazer para otimizar isso.
Existem> 100 tabelas e quase 2.000 índices a serem reconstruídos. O banco de dados tem 200 GB de tamanho.
A seção principal do script que estou executando é a seguinte:
declare c_toggle_index cursor FORWARD_ONLY READ_ONLY for
select 'alter index ' + QUOTENAME(i.name) + ' on ' + o.name + ' rebuild'
from sys.indexes as i
Inner Join sys.objects o
On o.object_id = i.object_id
Where o.is_ms_shipped = 0
And i.index_id >= 1
and i.type > 1
and i.is_disabled = 1
Eu considerei definir ONLINE = OFF para a instrução alter index, mas como os índices começam desativados, eu não tinha certeza de que essa configuração teria algum efeito. Também considerei definir SORT_IN_TEMPDB = ON, mas como os arquivos tempdb estão na mesma unidade que os arquivos .mdf dos bancos de dados, presumi que também não havia nenhum benefício em fazer isso.
Durante a execução do script de reconstrução, notei que tenho muitos tipos de espera CXPACKET. Eu realmente não entendo por que isso seria ou se é um problema que eu deveria estar procurando resolver.
Um último ponto que pode ser relevante: meu servidor inteiro está inativo no momento, além dessa importação de dados no banco de dados. Não há outra atividade do usuário para considerar ou se preocupar; minha única preocupação é importar os dados para o banco de dados no menor tempo possível.
CXPACKET
esperas: o índice é reconstruído por si próprio, os índices de varredura (mesmo o índice sendo reconstruído ) e essas varreduras podem usar paralelismo. Você não deve se preocupar com essas esperas - o paralelismo provavelmente está ajudando.