Montag, August 19, 2013

Asynchrone Aktualisierung globaler Indizes in 12c

Richard Foote hat sich in einer Artikelserie mit dem Thema Global Index Maintenance auseinandergesetzt. Dabei behandeln die einzelnen Artikel folgende Aspekte:
  • Global Index Maintenance – Pre 12c (Unwashed and Somewhat Slightly Dazed): erläutert die Situation in 11g: dort war die Löschung einer Tabellen-Partition eine sehr billige Operation, die allerdings alle zugehörigen globalen Indizes invalidierte (Status = 'UNUSABLE'). Alternativ konnte man dem drop partition Kommando auch die Klausel "update global indexes" zufügen, die dann aber erwartungsgemäß hohe Kosten (db block gets und redo) hervorrief.
  • 12c Asynchronous Global Index Maintenance Part I (Where Are We Now ?): in 12c ist die Verwendung der Klausel "update global indexes" sehr viel günstiger geworden: sie ruft keine unmittelbare Reorganisation hervor, sondern führt nur zu ORPHANED_ENTRIES, also Index-rowid-Verweisen ins Nirgendwo. Die erforderlichen Maintenance-Operationen erfolgen asynchron. Der Verzicht auf die unmittelbare Reorganisation bedeutet dabei allerdings, dass die gelöschten Index-Einträge von folgenden DML-Operationen nicht direkt wiederverwendet werden können, was zu einem Wachstum des Index führen kann (jedenfalls, wenn der Index nonunique ist, was in Teil 3 genauer erläutert wird).
  • 12c Asynchronous Global Index Maintenance Part II (The Space Between): untersucht das interne Vorgehen anhand eines Vergleichs von Index Block Dumps aus 11g und 12c: in 11g werden die Verweise auf die gelöschte Partition mit dem Flag D (= deleted) versehen, während im 12er Dump des Index keine Hinweise auf die Löschung zu finden sind. Das fehlen der Information in 12c macht die Wiederverwendung von Einträgen verständlicherweise unmöglich. Um eine Reorganisation der Index-Struktur hervorzurufen, gibt es verschiedene Möglichkeiten:
    • ALTER INDEX ... REBUILD PARTITION ...; ruft einen vollständigen Neuaufbau der Index-Struktur hervor, was effektiv, aber auch teuer ist.
    • ALTER INDEX ... COALESCE CLEANUP; löscht die orphaned entries aus der Index-Struktur, was billiger ist als die Rebuild-Operation.
    • PMO_DEFERRED_GIDX_MAINT_JOB - führt die Reorganisation automatisch im vorgesehenen Maintenance-Window durch.
  • 12c Asynchronous Global Index Maintenance Part III (Re-Make/Re-Model): zeigt, dass im Fall eines unique index eine Wiederverwendung der orphaned entries unmittelbar möglich ist, wenn der gleiche Wert erneut indiziert wird (was der Herr Foote gelegentlich schon mal erläutert hatte).
Möglicherweise wird die Serie noch weiter fortgesetzt, worauf ich dann vermutlich reagieren würde.

Keine Kommentare:

Kommentar veröffentlichen

Kommentar veröffentlichen