As inserções em massa em um DB afetam o desempenho de todo o servidor?

2

Eu tenho um processo que usa BULK INSERT para enviar dois arquivos CSV para as tabelas SQL, para que eu possa juntar os dados deles com outra tabela que eu tenho. Os dados provenientes dos arquivos CSV geram tabelas com cerca de 100.000 linhas cada. Quando o processo é concluído, essas tabelas são truncadas. Todo esse processo está sendo executado em um banco de dados que foi criado apenas para isso (nenhuma outra atividade).

Depois de executar isso por um tempo em ciclos de um minuto, todo o servidor se torna MUITO lento. Parece que esta atividade está tomando algum recurso e não o liberando. Mesmo que a inserção em massa e a junção demorem apenas cerca de 5 segundos de cada vez.

    
por Ron Harlev 12.05.2011 / 20:29

3 respostas

4

Todas as ações que você executar na instância consumirão recursos e afetarão o desempenho até certo ponto. Algumas coisas são mais notáveis do que outras.

Em qual modelo de recuperação seu banco de dados está? A tabela em que você está adicionando os dados está em outro banco de dados?

É difícil dizer qual poderia ser o problema subjacente apenas com as informações que você forneceu. Você terá que fazer algum monitoramento em seu servidor para ver exatamente qual poderia ser a causa. Seu servidor pode estar enfileirando solicitações de E / S, você pode estar aumentando seu arquivo de log trans e executando em esperas lá, você pode estar forçando restrições de memória, índices podem estar sendo reconstruídos, todos os tipos de coisas.

    
por 12.05.2011 / 21:04
2

usando o BULK INSERT por si só não significa que você obterá registros mínimos. Você deve ter cuidado e ler os pré-requisitos para obter registros mínimos.

Ref: link

Ref: link

Além disso, verifique as configurações de memória na caixa e verifique se a memória máxima está configurada adequadamente. Você já olhou para o uso do arquivo de paginação? Se houver muito uso de arquivo de paginação, talvez você também queira reduzir a configuração de memória máxima. O que mais está sendo executado na caixa?

A maneira correta de lidar com isso é usar as informações do WAIT STATISTICS [ link e também rastrear algumas informações quando o servidor está lento. Quando o servidor está lento, você precisa verificar o uso da CPU, o uso de IO, etc ... e o @SQLSoldier tem um script legal para identificar a causa raiz dos altos picos de CPU transientes.

Ref: link

Este é um ponto de partida e há outras coisas que você pode fazer, mas precisa de mais informações.

    
por 12.05.2011 / 23:45
0

Depende muito do hardware e da configuração do servidor, mas sim, a atividade pesada em um único banco de dados pode criar problemas de desempenho em todo o servidor. O cenário mais plausível é que a atividade pesada consome quase toda a memória do servidor e empurra todo o resto do cache do sistema (ou do SQL Server); Assim, mesmo depois de terminar, tudo terá que ser lido novamente no disco.

    
por 12.05.2011 / 21:13