Einzelnen Beitrag anzeigen

jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#14

AW: ORACLE 11: DELETE sehr langsam

  Alt 21. Nov 2012, 08:58
Ich vermute mal, dass es ein wiederkehrendes Problem ist, sonst muss man sich wohl nicht groß den Kopf zerbrechen.

Das Löschen kann schon sehr lange dauern. Die Löschanweisung auf einem nicht indizierten Feld bedeutet zuerst mal einen Fullscan.
Dann ist die Frage, wieviel Datensätze betroffen sind.
1 oder 500T?

Ausführungsplan
Es wäre zu prüfen, ob regelmäßig (nächtlich) Statistiken aktualisiert werden bzw. ein planmäßiges Vorgehen da ist.
Wenn Statistiken aktualisiert werden, muss sichergestellt sein, dass auch die Indizes einbezogen werden.
Andernfalls kommt eben Schrott raus.

Im Datenmodell wäre zu prüfen, ob FK auf die Tabelle zeigen oder sie selber Fremdbezüge hat, Cascade Constraints definiert sind usw.
All das bedeutet keinen Geschwindigkeitszuwachs.

Indizes
können gedropped werden oder "abgeschaltet"
Code:
ALTER INDEX myIndex UNUSABLE;
[delete]
ALTER INDEX myIndex rebuild (online)
Beim Thema Indizes wäre noch zu überlegen, welches DML Verhalten auf der Tabelle existiert. Viele Inserts, Deletes wirken sich negativ auf den Index aus. PCTFree usw können auch hier vielleicht lindern. Ein Index der immer voll gepackt wird, kommt nicht gut mit Änderungen klar.

Dann wäre noch die Frage, was während des Löschens noch/sowieso schon läuft und welcher User die Löschanweisung ausführt und in welchem Kontext (ora scheduler, OS Cronjob, ..).
Gibt es konkurrierende Last auf dem System?
Laufen (nachts) bspw. zeitgleich Jobs via Scheduler (z.B. Statistiken sammelen, haha), zieht der Löschjob ggF den kürzeren.
Gruß, Jo
  Mit Zitat antworten Zitat