2009-03-31 6 views
1

Ich habe eine kleine Anwendung, die XML-Dateien liest und die Informationen in eine SQL DB einfügt.Nutzen Sie mehrere Kerne, die SQL-Anweisungen ausführen

Es gibt ~ 300 000 Dateien zu importieren, jedes mit ~ 1000 Datensätze.

Ich habe die Anwendung auf 20% der Dateien gestartet und es läuft jetzt seit 18 Stunden, ich hoffe, ich kann diese Zeit für den Rest der Dateien verbessern.

Ich verwende keinen Multi-Thread-Ansatz, aber da der Computer, auf dem ich den Prozess ausführe, über 4 Kerne verfügt, habe ich darüber nachgedacht, um die Performance etwas zu verbessern (obwohl ich das Hauptproblem vermute) die I/O und nicht nur die Verarbeitung).

Ich dachte über die Verwendung der BeginExecutingNonQuery() -Methode für das SqlCommand-Objekt, das ich für jede Einfügung erstellen, aber ich weiß nicht, ob ich die maximale Anzahl gleichzeitiger Threads begrenzen sollte (noch weiß ich, wie es geht).

Was ist Ihr Tipp, um die beste CPU-Auslastung zu erhalten?

Dank

Antwort

0

Blick in bulk insert.

Importiert eine Datendatei in eine Datenbanktabelle oder Ansicht in einem benutzerdefinierten Format.

0

Haben Sie versucht, SqlBulkCopy zu verwenden? Im Grunde laden Sie Ihre Daten in eine DataTable-Instanz und verwenden dann die SqlBulkCopy-Klasse, um sie in SQL Server zu laden. Sollte eine RIESIGE Leistungssteigerung bieten, ohne dass sich Ihr aktueller Prozess so stark ändert wie mit bcp oder einem anderen Dienstprogramm.

+0

Die Sache ist, muss ich einige kleine Verarbeitung zu den Informationen vor dem Einfügen tun, im Grunde enthalten die Dateien Informationen, die in 4 verschiedenen Tabellen geht, aber ich werde einen Blick darauf werfen, könnte es nützlich sein. Danke – willvv

+0

Es sollte sogar in diesem Fall helfen - vielleicht würden Sie 4 DataTables benötigen, um die Ergebnisse Ihrer Verarbeitung zu halten, aber in jedem Fall sollten Sie Ihre Leistung verbessern. –

2

Wenn ich Sie richtig verstehe, lesen Sie diese Dateien auf demselben Computer, auf dem die Datenbank ausgeführt wird. Obwohl ich nicht viel über Ihre Maschine weiß, wette ich, dass Ihr Engpass Disk IO ist. Das klingt für mich nicht sehr rechenintensiv.

+0

Ich weiß, dass der Prozess nicht rechenintensiv ist, aber ich rate, wenn ich 4 gleichzeitige Einfügungen mache, wird SQL die Vorteile der mehreren Kerne nutzen und es effizienter machen. Und ja, die IO ist intensiv, aber zumindest möchte ich SQL so beschäftigt wie ich kann. – willvv

+0

Stellen Sie dann sicher, dass Sie die Dateien von einem anderen physischen Laufwerk lesen, als von demjenigen, der die db enthält. – innaM

Verwandte Themen