Nachträgliches Partitionieren einer Tabelle - Effektivster Weg?

Moin,

aktuell stehe ich vor dem Problem, eine Monstertabelle in die schon seit Jahren Daten reinwandern, nachträglich zu partitionieren. Die Tabelle hat etwa 600 Millionen Rows und ist inklusive Indizes ca 30. GB groß geworden.

Die Aufgabe ist nun folgende:

Finde einen Weg, mit möglichst kurzer Downtime (im Idealfall nur Anwendung runterfahren, Tabelle umbenennen, Anwendung hochfahren) die Tabelle nachträglich zu partitionieren. Dabei ist es erlaubt, dass die älteren historischen Daten eine zeitlang nicht verfügbar sind, aber letzten 2-3 Monate sollten schnellstmöglich wieder zur Verfügung stehen.

Meine Idee:

  • Anwendung runterfahren
  • Tabelle history umbenennen in history_old
  • Neue leere Tabelle history anlegen und vererbte Tabelle history_201104
  • Anwendung wieder hochfahren

Damit sind dann erstmal überhaupt keine historischen Daten mehr verfügbar.- Als nächstes dann:

  • Dump von history_old erzeugen
  • Dump händisch in mehrere Teildumps zerlegen mit meinem Lieblings Texteditor (Anmerkung des Verfassers: das ist natürlich EMACS :slight_smile: )
  • einzelne Dumps in einzelne vererbte Tabellen restoren.

Würdet ihr das auch so machen oder gibt es einen schlaueren Weg ?

Letztendlich: Testen.

Andersherum geht es auch: du erstellst neue partitionierte Tabellen, kopierst die Werte da hinein, löscht sie aus der Haupttabelle und hängst die neue Tabelle als Partition ein.

Wenn du fertig bist, erstellst du die leere Haupttabelle noch mal und hängst alle Partitionen um.
Danach kannst du die alte Tabelle löschen, weil die ist dann leer, aber bloated.