sql >> Database >  >> RDS >> Sqlserver

Wat is de aanbevolen batchgrootte voor SqlBulkCopy?

Ik heb een importhulpprogramma op dezelfde fysieke server als mijn SQL Server-instantie. Een aangepaste IDataReader gebruiken , het ontleedt platte bestanden en voegt ze in een database in met behulp van SQLBulkCopy . Een typisch bestand heeft ongeveer 6 miljoen gekwalificeerde rijen, gemiddeld 5 kolommen met decimalen en korte tekst, ongeveer 30 bytes per rij.

Gezien dit scenario vond ik een batchgrootte van 5.000 het beste compromis tussen snelheid en geheugenverbruik. Ik begon met 500 en experimenteerde met groter. Ik vond 5000 gemiddeld 2,5x sneller dan 500. Het invoegen van de 6 miljoen rijen duurt ongeveer 30 seconden met een batchgrootte van 5.000 en ongeveer 80 seconden met een batchgrootte van 500.

10.000 was niet meetbaar sneller. Verplaatsen naar 50.000 verbeterde de snelheid met een paar procentpunten, maar het is de verhoogde belasting van de server niet waard. Boven de 50.000 vertoonden geen verbeteringen in snelheid.

Dit is geen formule, maar het is een ander gegevenspunt dat u kunt gebruiken.



  1. Hoe kan ik veranderingen tussen rijwaarden in een SQL-tabel detecteren en binden?

  2. Batch-modus normalisatie en prestaties

  3. Hoe voer ik een ingevoegde identiteit in en retourneer ik met Dapper?

  4. Postgres - FATAL:databasebestanden zijn niet compatibel met de server