Para maximizar o desempenho do banco de dados, quais comandos devem ser executados após o carregamento de grandes quantidades de dados no SQL Server 2008 via SSIS

11

Eu escrevi um pacote SSIS para carregar dados de teste em um banco de dados vazio. Algumas das tabelas são muito grandes (~ 700 milhões de linhas). Após a conclusão do pacote SSIS, existem comandos que devo executar (como DBA aprendiz!) Para maximizar o desempenho do banco de dados?

Por exemplo, eu executei, EXEC sp_updatestatsmas ele relatou que nenhum índice exigia atualização.

Existe uma lista de coisas a fazer depois que grandes quantidades de dados são carregadas ou o SQL Server 2008 cuida de tudo isso para você?

Mark Robinson
fonte

Respostas:

8

Se você estiver carregando em um banco de dados vazio, poderá / deve tomar medidas para evitar a necessidade de etapas adicionais de manutenção após o carregamento. A fragmentação é o inimigo, é isso que você está tentando evitar.

  • Solte todos os índices NC antes de carregar.
  • Após o carregamento, adicione os índices NC para cada tabela em sequência, ou seja, não adicione um índice à Tabela A, depois à Tabela B, depois volte à Tabela A. Isso não tem efeito na fragmentação, mas pode melhorar o tempo necessário para adicionar índices em conjuntos de dados muito grandes (reduz a rotatividade do buffer pool).
  • Se você pode inserir dados em uma tabela na ordem do índice em cluster, deixe o índice em cluster no lugar. Se não puder, despeje os dados em um heap e recrie-os para um carregamento posterior do índice em cluster.

Em vez de copiar e colar, mostrarei uma lista muito abrangente de referências para otimização de ETL @Marian reunidas em uma resposta a uma pergunta que fiz no BCP . Muitos deles serão igualmente aplicáveis ​​ao seu cenário.

Mark Storey-Smith
fonte
2
Interessante, no link para os vídeos do SQLCAT e SSIS, a descoberta deles nunca caiu um índice NC. Acho que este é mais um caso de "depende"
billinkc
2
@ Billinkc foi que não para cargas incrementais, ao invés do banco de dados vazio esta pergunta também se refere? De qualquer forma, o teste SQLCAT tende a envolver uma classe de hardware raramente vista em organizações típicas.
Mark Storey-Smith
5

Depende de quanto de uma janela você possui, mas geralmente atualiza estatísticas e reconstrói / reorganiza índices é um bom passo a ser seguido. Fora isso, não deve haver mais nada que você precise fazer realmente.

As estatísticas informam ao otimizador de consulta quantas linhas provavelmente são afetadas por uma operação e, por sua vez, informa ao SQL qual abordagem usar para executar suas consultas. A inserção de dados pode distorcer a distribuição e, se você não inseriu linhas suficientes para acionar uma atualização de estatísticas no modo de atualização automática, o manual deve ajudar. Se você tiver a janela, digo manter a parte de atualização das estatísticas.

Os índices podem ficar fragmentados à medida que os dados são adicionados. A reconstrução ou reorganização ajuda a reduzir isso, o que pode levar a um desempenho aprimorado ao acessar seus dados.

Mike Walsh
fonte
4
Na mesma linha dos índices, em um dos vídeos SSIS do SQLCAT , eles também sugerem uma regra geral: se o crescimento de seus dados for> 100% e houver um único NCI, descarte-os e recriá-los. Se for superior a 10% e houver mais de 2 NCI, soltar e recriar trará melhor desempenho.
billinkc
2
Apenas para esclarecer o comentário de Bill - acho que ele está dizendo que a sugestão é que os horários sejam criados de forma aleatória - eles significam Drop Index, faça o carregamento de seus dados e depois recrie o índice. Em vez de deixar o (s) índice (s) lá durante o carregamento e reconstruir depois. Acho que sim :-) e sim, ótimo ponto, eu marquei esse comentário com +1.
Mike Walsh