DB2 und Löschoperationen
- Dieses Thema hat 1 Antwort und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 14 Jahre, 2 Monaten vonTeilnehmer.
- AuthorPosts
- 5. November 2008 um 11:33 Uhr #4008
Hi,
ich habe ein Performance-Problem beim Löschen von Datensätzen aus einer Tabelle.
Ich habe eine Test-Tabelle mit ca 4,4 Mio-Datensätzen. Aus dieser Tabelle sollen jetzt einige Datensätze gelöscht werden (ca. 450 000).
Ein einfaches "D ELETE FROM <tabelle> WHERE Datum < ‚2006-31-12‘;" welches diese 450 000 Datensätze betrifft, dauert sehr lange (über Stunden).
Ich habe vorher in dieser Transaktion ein "A LTER TABLE <tabelle> ACTIVATE NOT LOGGED INITIALLY;" schon durchgeführt, welches aber nur eine geringe Besserung einbrachte. Die Ausführzeit ist immernoch indiskutabel langsam.
Mache ich auf der gleichen Maschine ein "Truncate" mit "A LTER TABLE <tabelle> ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE;" dauert die Ausführung keine 2-3 Sekunden. Dabei werden alle 4,4 Mio-Datensätze gelöscht und laut Steuerzentrale ist die Datenbank um 1,3GB kleiner. Aber die komplette Tabelle kann nicht gelöscht werden.
Die Tabelle selber hat nur vier importierte Keys und keine exportierten, die von anderen Tabellen benötigt werden. Eine Löschoperation hat keinen Einfluss auf andere Tabellen.
Welche Möglichkeiten gibt es, deutlich schneller einzelne Datensatzblöcke aus der Tabelle zu löschen, ohne die ganze Tabelle zu leeren.
Es geht nicht um eine einmalige Aktion, sondern um eine wöchentliche Aktion…Thorti
7. November 2008 um 6:38 Uhr #4181Hi "Thorti",
450.000 Sätze sind ja nicht nur "einige Datensätze", das sind ja mehr als 10%.
Bei dieser Problematik würde ich einen EXPORT IXF erwägen und mit LOAD NONRECOVERABLE zurückladen. Von der Geschwindigkeit bin ich immer wieder angenehm überrascht!
Lag der "A LTER TABLE <tabelle> ACTIVATE NOT LOGGED INITIALLY;" in der selben Unit of Work? [Nicht, dass das Statement unwiksam war! 😮 ]
Ansonsten sind beim "D ELETE FROM <tabelle> WHERE Datum < ‚2006-31-12‘;" die primary Logs und vermutlich secondary Logs, die erst noch angelegt werden müssen, komplett belegt. Dazu kommt noch der Aufwand für Tablescan und die Indexpflege.Wie gesagt, ich würde "die guten Sätze" exportieren und dann wieder zurückladen.  😎
Viel Erfolg
Gernot - AuthorPosts
You must be logged in to reply to this topic.