SqlBulkCopy-Leistung

Ich arbeite daran, die Leistung von Massengütern zu steigern. Hunderte von Millionen von Datensätzen + täglich.

Ich habe dies verschoben, um das zu verwendenIDatareader Schnittstelle anstelle der Datentabellen und bekam eine spürbare Leistungssteigerung (500.000 weitere Datensätze pro Minute). Das aktuelle Setup ist:

Ein benutzerdefinierter zwischengespeicherter Reader zum Analysieren der abgegrenzten Dateien.Wickeln Sie den Stream Reader in einen gepufferten Stream.Eine benutzerdefinierte Objektleserklasse, die die Objekte auflistet und die implementiertIDatareader Schnittstelle.DannSqlBulkCopy schreibt an Server

Der Großteil des Performance-Flaschenhalses befindet sich direkt inSqlBulkCopy.WriteToServer. Wenn ich den Prozess bis aber ausschließlich nur die Unit testeWriteToServer Der Vorgang kehrt in ca. 1 Minute zurück.WriteToServer dauert weitere 15 Minuten. Für den Komponententest befindet er sich auf meinem lokalen Computer, sodass auf demselben Laufwerk die Datenbank gespeichert ist und die Daten nicht über das Netzwerk kopiert werden müssen.

Ich verwende eine Heap-Tabelle (keine Indizes; gruppiert oder nicht gruppiert; ich habe verschiedene Stapelgrößen ohne wesentliche Leistungsunterschiede durchgespielt).

Es ist notwendig, die Ladezeiten zu verkürzen, also hoffe ich, dass jemand jetzt einen Weg findet, um ein bisschen mehr Blut aus diesem Auftritt zu quetschen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage