Jag har ett importverktyg som sitter på samma fysiska server som min SQL Server-instans. Använda en anpassad IDataReader
, den analyserar platta filer och infogar dem i en databas med SQLBulkCopy
. En typisk fil har cirka 6 miljoner kvalificerade rader, i genomsnitt 5 kolumner med decimal och kort text, cirka 30 byte per rad.
Med tanke på detta scenario fann jag att en batchstorlek på 5 000 var den bästa kompromissen av hastighet och minnesförbrukning. Jag började med 500 och experimenterade med större. Jag fann att 5 000 var 2,5 gånger snabbare i genomsnitt än 500. Att infoga de 6 miljoner raderna tar cirka 30 sekunder med en batchstorlek på 5 000 och cirka 80 sekunder med en batchstorlek på 500.
10 000 var inte mätbart snabbare. Att flytta upp till 50 000 förbättrade hastigheten med några procentenheter men det är inte värt den ökade belastningen på servern. Över 50 000 visade inga förbättringar i hastighet.
Det här är inte en formel, men det är en annan datapunkt som du kan använda.