Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Qual é o tamanho de lote recomendado para SqlBulkCopy?


Eu tenho um utilitário de importação no mesmo servidor físico que minha instância do SQL Server. Usando um IDataReader personalizado , ele analisa arquivos simples e os insere em um banco de dados usando SQLBulkCopy . Um arquivo típico tem cerca de 6 milhões de linhas qualificadas, com média de 5 colunas de decimal e texto curto, cerca de 30 bytes por linha.

Dado esse cenário, descobri que um tamanho de lote de 5.000 é o melhor compromisso de velocidade e consumo de memória. Comecei com 500 e experimentei com maior. Descobri que 5000 é 2,5x mais rápido, em média, que 500. A inserção de 6 milhões de linhas leva cerca de 30 segundos com um tamanho de lote de 5.000 e cerca de 80 segundos com um tamanho de lote de 500.

10.000 não foi mensuravelmente mais rápido. Mover para 50.000 melhorou a velocidade em alguns pontos percentuais, mas não vale a pena aumentar a carga no servidor. Acima de 50.000 não apresentou melhorias na velocidade.

Esta não é uma fórmula, mas é outro ponto de dados para você usar.