Frage

Ich habe eine Anwendung, die Aktivität in einer Tabelle (Oracle 10g) aufzeichnet. Die Logging-Aufzeichnungen sollten für mindestens 30 Tage gehalten werden. Ich erwarte, dass etwa 20 Millionen Zeilen pro Monat zu dieser Tabelle hinzugefügt werden.

Der DBA schlug vor, dass die Tabelle eine Woche Daten in Partitionen aufgeteilt werden, enthalten. Die wöchentliche Wartung Skript würde dann die älteste Partition löschen (so dass nur 4 Wochen Daten in der Tabelle).

Was wäre der beste Weg, um diese Protokolltabelle der Partitionierung?

War es hilfreich?

Lösung

Partitionieren einer Tabelle ist nicht schwer - es scheint, dass Sie die Daten auf einer wöchentlichen Basis zu entfernen sein wird, so dass die Teilungsklauseln aussehen wird

PARTITION "P2009_45"  VALUES LESS THAN 
(TO_DATE(' 2009-11-02 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
 PARTITION "P2009_46"  VALUES LESS THAN 
(TO_DATE(' 2009-11-09 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
... etc

, wo Ihre Partitionierungsspalte sind Ihre Datumsspalte von Interesse in der Tabelle.

Weitere Anmerkungen:

  • Wenn Sie ein Upgrade können Sie auf 11g in Anspruch nehmen Intervalls Partitionierung, die ähnlich ist dieser Bereich Partitionierung, aber Oracle gelingen wird, neue Partitionen zu schaffen für Sie.
  • Wenn Sie regelmäßig gehen weg fallen Partitionen, ich würde Ihnen raten, alle machen Indizes für die Tabelle lokal partitioniert das zu vermeiden, Umbauten das wäre erforderlich globale Partitionen nach der Teilung Operationen.
  • Wenn Sie eine gute Vorstellung von der Zahl von Protokolleinträgen pro Monat, und es relativ konstant bleibt, können Sie Verwendung einer Sequenz (als Primärschlüssel) ist der Ansicht, dass unter dieser Nummer einer Kappe versehen und dann rezykliert auf 0. Dann wird Ihr Rücken Logging-Anweisungen müssen „merge werden INTO ... "Aussagen, die entweder eine neue Zeile erstellen oder die Zeile überschrieben wenn es vorhanden ist. Dies ist nur garantiert dass Sie die Anzahl der Zeilen behalten durch die Sequenz max-Wert erlaubt und NICHT ein bestimmtes Zeitintervall, aber das könnte sein, eine Alternative zu Partitionieren (der als DVE-Punkte out, ist eine extra Kosten Option)

Andere Tipps

Das wahrscheinlichste Partitionierungsschema wäre, range-Partition Ihre Daten auf dem Erstellungsdatum. Jede Woche würden Sie eine neue Partition erstellen und die ältesten fallen. Die Auswirkungen werden davon abhängen, wie diese Tabelle verwendet wird / indiziert.

Da es sich um eine Logging-Tabelle ist vielleicht ist es nicht indiziert, in diesem Fall eine Partition fallen wird wenig Auswirkungen: Referenzierung Objekte werden nicht für ungültig erklärt werden, wird der Tropfen erfordern nur eine Partition Sperre (und die älteste Partition shouldn‘ t zu diesem Zeitpunkt eingeführt werden).

Wenn die Tabelle indiziert ist, müssen Sie entscheiden, ob Ihre Indizes global sein oder partitionned. Globale Indizes müssen neu erstellt werden, wenn Sie eine Partition fallen (die Zeit in Anspruch nimmt, obwohl 20M Reihen noch überschaubar ist). Sie können die UPDATE GLOBAL INDEXES Klausel der Indizes gültig nach der Teilung Abfall zu halten.

Lokale Indizes wie die Tabelle partitionned werden und möglicherweise weniger effizient als globaler Indizes (Indexbereich Scans hat jeden lokalen Index anstelle einem gemeinsamen Index scannen, wenn Sie nach dem Datum abfragen nicht). Diese Indizes werden nicht nach einer Partition Drop aktualisiert werden müssen.

20 Millionen Zeilen pro Monat und Sie nur 30 Tage von Daten zu halten haben? (Das ist ungefähr ein Monat wert).

Auch mit 12 Monaten im Wert von Daten würde es nicht schwer sein, diese Tabelle abzufragen (als eine große Tabelle) mit dem richtigen Index. Einfügen ist keine probleme entweder mit 1 Zeile in der Logging-Tabelle oder 20 Millionen.

Partitionierung in Oracle ist auch eine Funktion, die bezahlt werden muss, wenn ich mich richtig, so ist es zu teuer (wenn Sie nicht bereits über eine Lizenz).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top