2017-01-21 7 views
0

Gespeicherte Prozedur 1 hat eine Auswahlabfrage, die einen Datensatz zurückgibt, Datumsangaben, um spezifisch zu sein. Ich benutze einen Cursor, um durch diesen Datensatz zu gehen und für jede Zeile wird eine andere gespeicherte Prozedur aufgerufen.Alternativer Cursor für Zeile-für-Zeile-Operation

Die gespeicherte Prozedur 2 fügt für jeden Wert des Cursors ungefähr 20.000 Zeilen in eine Tabelle ein.

Da sich im Cursor ungefähr 100 Datensätze befinden, beträgt die Gesamtanzahl der eingefügten Zeilen 200 KB. Dies führt dazu, dass die Abfrage Tage lang läuft, bis sie in der Produktion gestoppt wird.

Die gleiche Abfrage dauert etwa 8 Minuten in DEV.

Ich habe versucht, foreach Container in SSIS (dev) und das dauert 5 Minuten jetzt (dev).

Gibt es eine schnellere Möglichkeit, diese Datensätze einzufügen?

Ich überlegte, Tabellenfunktion zu verwenden, aber die Verbindung zwischen den beiden ist schwierig, da der erste Datensatz nur Daten enthält.

+0

Ist die Menge der Daten in Produktion und Entwicklung identisch? Wenn ja, warum ist es langsamer? –

+1

Das Einfügen von 200.000 Zeilen, auch innerhalb eines Cursors, sollte nicht Tage dauern. –

+0

Sind Sie Zeuge der gleichen Leistung im Produktionssystem, selbst wenn das System fast keine andere Nutzung hat? –

Antwort

0

Je nachdem, was die gespeicherte Prozedur 2 tut, lohnt es sich, die Masseneinfügung zu betrachten.

See: https://www.simple-talk.com/sql/learn-sql-server/bulk-inserts-via-tsql-in-sql-server/

Möglicherweise möchten Sie auch Indizes und Konfiguration des prod Umgebung überprüfen optimale Leistung der Last zu gewährleisten. Der obige Link enthält einige Vorschläge zur Verbesserung der Insert-Leistung.

Also auf jeden Fall eine Lektüre wert.

Verwandte Themen