Frage : Leistungs-Änderungen in einem Programm DB2

Hallo haben alle,

We ein Archivprogramm verwendet, in dem wir ein Tabellenverzeichnis gekennzeichnet hatten, die archivieren mussten. Die ältere Annäherung war:

1) hatte ein COBOL-Programm, das aus Tabellen ein Tabelle auf einmal.
2) löschte, welches, die Tabellen mit wenigen Aufzeichnungen using eine einzelne Löschung gelöscht wurden. Z.B. LÖSCHUNG VON TABLE_FIRST, IN DEM DATUM < GEGENWÄRTIGES DATE
3) für Tabellen mit bedeutender Zahl der Aufzeichnungen wir einen Cursor hatte, der Aufzeichnungen holte. Für jede Aufzeichnung, die geholt wir eine Löschung query.
4), als die REICHWEITE für den Cursor laufen gelassen wurde, wir laufen ließen, holte 5000 Reihen auf einmal z.B. HOLEN CSR_CURSOR FÜR 5000 REIHEN. Die Daten wurden in einer Reihe mit 5000 Reihen gespeichert. Aufzeichnungen wurden von der Reihe einzeln gelesen und die Löschung wurde using diese Werte durchgeführt. Nachdem die ersten 5000 Reihen gelöscht sind, holen wir den folgenden Block von 5000 für dieses table.

This Jahr, das wir eine Anforderung haben, in der wir gebeten worden sind, die spezifische harte Kodierung der Tabelle vom Programm zu entfernen. Wir sollen eine Listenakte, die ein Tabellenverzeichnis zu löschendes und enthält die für Auslassung verwendet zu werden Kriterien verursachen. Dieses erforderte eine Überholung zu unserem Programm. Dieses ist die Annäherung, die wir fürs Erste haben:

1) führen wir die Löschung auf den Tabellen parallel durch. EIN CL-Programm wird laufen gelassen, um von der Listenakte zu lesen und für jede Tabelle verzeichnete ein Löschungprogramm ist submitted.
2), welches das Löschungprogramm ein dynamisches DB2 COBOL Programm ist, in dem wir zuerst finden, dass heraus der Primärschlüssel für ein table.
3) EINE AUSERWÄHLTE Frage using die Felder im Primärkey.
4) VORBEREITET wird wir SQLDA verwenden, um Speicheradresse für den unterschiedlichen Satz der Primärschlüssel zu laden, die occur.
5) für jede Aufzeichnung, die geholt wird (using Primärschlüsselwerte des Th), wir laufen lassen eine LÖSCHUNG-Aussage können. Die REICHWEITE-Aussage ist REICHWEITE CSR_CURSOR USING BESCHREIBER: SQLDA.

What, das ich nicht in der Lage bin, using die REICHWEITE-Aussage in point# 5 zu erzielen, ist, für 5000 REIHEN ZU HOLEN. Es ist mein Verständnis, dass ich bessere Leistung erhalte, wenn ich in den Blöcken von 5000 (dieses ist gerade wir wählte ein Zufallszahlen) und in der Durchlauf LÖSCHUNG für jede der 5000 Aufzeichnungen HOLE, die geholt werden als, eine einfache REICHWEITE und einen Betrieb laufen lassend eine LÖSCHUNG für jede Aufzeichnung, die durch die REICHWEITE zurückgebracht wird.
Please raten, wenn ich korrekt bin, wenn ich annehme, dass „REICHWEITE im Block von 5000 und in der LÖSCHUNG“ schneller ist, die „HOLEN ALLE und LÖSCHUNG“. Wenn ja, wie, was die Syntax ist, zum in den Blöcken zu holen, wenn es im Voraus das SQLDA descriptor.

Thanks für das Hilfe.

Regards
Ali.
verwendet

Antwort : Leistungs-Änderungen in einem Programm DB2

Ich denke, dass dieses ein littlle sein konnte, das einfacher ist, als Sie verwirklichten -- Sie können einen Anschluss zwischen den zwei Temptabellen tun und ihn nennen getan:
-- Ist hier der Inhalt Ihrer abschließenden Tabelle…
Col1 Col2 Col3 Col4 Col5 Col6 Col7 DSTRecID Land vorwählen
von DBO.PROC1_TBL
Anschluss
Col1 Col2 Col3 Col4 Col5 Col6 Col7 DSTRecID Land vorwählen
von DBO.PROC2_TBL

-- Sie können es in Ihre abschließende Tabelle wie einsetzen:
Einsatz in dbo.final_table (Col1 Col2 Col3 Col4 Col5 Col6 Col7 DSTRecID Land)
Col1 Col2 Col3 Col4 Col5 Col6 Col7 DSTRecID Land vorwählen
von DBO.PROC1_TBL
Anschluss
Col1 Col2 Col3 Col4 Col5 Col6 Col7 DSTRecID Land vorwählen
von DBO.PROC2_TBL


Weitere Lösungen  
 
programming4us programming4us