Loading...

Das Partition Feature der Oracle DB

:heavy_exclamation_mark: This post is older than a year. Consider some information might not be accurate anymore. :heavy_exclamation_mark:

Folgender Beitrag ist eine Erläuterung von Christian Gohmann: Das Partitioning Feature ist eine kostenpflichtige Zusatzoption für die Enterprise Edition. Um das Feature überhaupt nutzen zu können, muss dies aktiviert werden – entweder direkt bei der Installation der Oracle Software oder später durch den chopt Befehl.

Ziel des Partitioning Features ist es die für eine Abfrage zu verarbeitende Datenmenge zu reduzieren. Häufig unterteilt man die Daten nach einem Datum (z.B. Lieferdatum) und wendet die RANGE Partionierung an. Beispiel: Du möchtest deine Lieferaufträge nach dessen Lieferdatum auf Monatsbasis partitionieren. Die Tabelle hat also pro Jahr 12 Partitionen (diese müssen vorher angelegt sein).

Monat                  Partitionsname
Januar                 LIEFERDATEN_JANUAR
Februar                LIEFERDATEN_FEBRUAR
…
Dezember               LIEFERDAEN_DEZEMBER

Jede Partition kann in einem eigenen Tablespace liegen, der dann zum Beispiel auch auf eigenen physikalischen Platten liegt. Oft packt man die Daten, die älter sind und nicht mehr häufig verwendet werden auf langsamere Platten – aktuelle Daten dann zum Beispiel auf SSDs. Wenn nun ein neuer Eintrag in der Tabelle erstellt wird, wird anhand des Partition Keys (Spalte nach der partitioniert wird) geschaut, in welche Partition der Datensatz abgelegt werden soll. Der Optimizer ist „partition-aware“, bedeutet er kann anhand der WHERE Bedingung erkennen, welche Partitionen er lesen muss., Beispiel: Zeige mir alle Daten des Monats Februar.

SELECT * FROM LIEFERDATEN WHERE lieferdatum BETWEEN '01.02.2015' AND '01.03.2015';

Der Optimizer würde in diesem Fall nur die Partition LIEFERDATEN_FEBRUAR lesen. Das ist um einiges schneller, als wenn er die komplette Datenmenge der gesamten Tabelle lesen müsste. Weitere Vorteile

  • Einfacheres Löschen von Altdaten (DROP PARTITION)
  • Austauschen von Partitionsdaten mit importierten Daten (EXCHANGE PARTITION)
  • Verschieben von Monatsdaten blockiert nicht die gesamte Tabelle (MOVE PARTITION)
  • Unterschiedliche physikalische Eigenschaften pro Partition (z.B. alte Daten werden komprimiert)

Hiermit kann man überprüfen, ob das Partitioning Feature aktiviert ist:

select * from v$option where parameter = 'Partitioning';
#    PARAMETER       VALUE
1    Partitioning    TRUE
Please remember the terms for blog comments.