Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Was ist die empfohlene Stapelgröße für SqlBulkCopy?

Ich habe ein Importdienstprogramm auf demselben physischen Server wie meine SQL Server-Instanz. Verwenden eines benutzerdefinierten IDataReader , parst es Flatfiles und fügt sie mit SQLBulkCopy in eine Datenbank ein . Eine typische Datei hat ungefähr 6 Millionen qualifizierte Zeilen, durchschnittlich 5 Spalten mit Dezimalzahlen und Kurztext, ungefähr 30 Byte pro Zeile.

Angesichts dieses Szenarios fand ich eine Stapelgröße von 5.000 als den besten Kompromiss aus Geschwindigkeit und Speicherverbrauch. Ich begann mit 500 und experimentierte mit größeren. Ich habe festgestellt, dass 5000 im Durchschnitt 2,5-mal schneller ist als 500. Das Einfügen der 6 Millionen Zeilen dauert etwa 30 Sekunden bei einer Stapelgröße von 5.000 und etwa 80 Sekunden bei einer Stapelgröße von 500.

10.000 war nicht messbar schneller. Das Aufsteigen auf 50.000 verbesserte die Geschwindigkeit um einige Prozentpunkte, aber es ist die erhöhte Last auf dem Server nicht wert. Oberhalb von 50.000 zeigten sich keine Geschwindigkeitsverbesserungen.

Dies ist keine Formel, sondern ein weiterer Datenpunkt, den Sie verwenden können.