Inserção / atualização grande na tabela causa tempo limite enquanto o SQL Server reorganiza os índices

2

Inserimos / excluímos cerca de 1 milhão de linhas de uma tabela de dois milhões de linhas com o SSIS.

Temos 20 índices nesta tabela.

Logo após o SSIS terminar, estamos passando por timeouts no frontend. Os tempos limite acabam indo embora.

Estou suspeitando que os índices estão causando isso durante a reorganização deles.

O que podemos fazer?

    
por Mike Gleason jr Couturier 23.07.2010 / 17:05

3 respostas

2

Os índices são atualizados conforme os dados são atualizados, as atualizações de índice são síncronas.

Agora, atualizar estatísticas é uma operação assíncrona. Após a atualização dos dados ser feita manualmente, faça uma atualização das estatísticas nas tabelas em questão.

    
por 25.07.2010 / 01:38
1

Ao atualizar mais de 20% de linhas na tabela, você está acionando uma atualização de estatísticas .

O comportamento padrão do sql server é fazer isso de forma síncrona. Isso significa que, se um índice afetado for usado em um plano de execução, o otimizador perceberá que as estatísticas estão desatualizadas, forçará uma atualização imediatamente e recompilará o plano de execução.

Há um novo recurso no SQL Server 2005 que fará com que as estatísticas sejam atualizadas de forma assíncrona para o banco de dados, ou seja, o otimizador usará as estatísticas obsoletas, mas executará a atualização de estatísticas em segundo plano, para que a próxima consulta aproveite as novas estatísticas. O comando é AUTO_UPDATE_STATISTICS_ASYNC ON , consulte BOL para obter mais informações.

A alternativa, como já sugerido, é forçar uma atualização manualmente na tabela após o carregamento. Você pode fazer isso com o comando UPDATE STATISTICS . Esta é a referência para BOL .

    
por 26.07.2010 / 07:00
0

Se você estiver usando a tarefa Inserção em massa no SSIS, pode tentar definir o tamanho do lote, isso dividiria em partes menores com confirmações no meio.

    
por 25.07.2010 / 02:06