sql >> Database teknologi >  >> RDS >> Sqlserver

Hvad er den anbefalede batchstørrelse for SqlBulkCopy?

Jeg har et importværktøj, der sidder på den samme fysiske server som min SQL Server-instans. Brug af en tilpasset IDataReader , den analyserer flade filer og indsætter dem i en database ved hjælp af SQLBulkCopy . En typisk fil har omkring 6M kvalificerede rækker, i gennemsnit 5 kolonner med decimal og kort tekst, omkring 30 bytes pr. række.

I betragtning af dette scenarie fandt jeg, at en batchstørrelse på 5.000 var det bedste kompromis mellem hastighed og hukommelsesforbrug. Jeg startede med 500 og eksperimenterede med større. Jeg fandt, at 5000 i gennemsnit var 2,5 gange hurtigere end 500. Indsættelse af de 6 millioner rækker tager omkring 30 sekunder med en batchstørrelse på 5.000 og omkring 80 sekunder med batchstørrelse på 500.

10.000 var ikke målbart hurtigere. At flytte op til 50.000 forbedrede hastigheden med et par procentpoint, men det er ikke den øgede belastning på serveren værd. Over 50.000 viste ingen forbedringer i hastighed.

Dette er ikke en formel, men det er endnu et datapunkt, som du kan bruge.



  1. SQL Oracle-optællingsklynger

  2. Problemer med at kalde lagret procedure fra C# med stor CLOB

  3. CONVERT() fra dato/tid til strengeksempler i SQL Server

  4. Se SQL Server Agent-jobhistorik med SSMS