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.