Wie sinnvoll ist die partitionierung einer postgresql-tabelle nach zeitstempeln?
#1
Ich stehe gerade vor einem kleinen Problem mit unserer PostgreSQL-Datenbank und frage mich, ob jemand ähnliche Erfahrungen gemacht hat. Wir haben eine Tabelle, die stündlich mit neuen Einträgen gefüttert wird, und ich habe bemerkt, dass die Performance bei bestimmten Abfragen stark nachlässt, sobald wir über eine bestimmte Zeilenzahl kommen. Ich habe überlegt, ob eine Partitionierung der Tabelle nach Zeitstempeln der richtige Weg wäre, aber ich bin mir unsicher, ob das den Overhead wert ist und wie ich das am besten angehe.
Zitieren
#2
Partitionierung nach Zeitstempeln kann helfen weil Abfragen oft zeitlich begrenzt sind und PostgreSQL dann nur relevante Partitionen durchsucht statt die komplette Tabelle zu scannen. Plane eine Range Partitioning auf dem Zeitstempel und achte darauf dass die Partitionen überschaubar bleiben damit das Pruning sauber funktioniert. Beachte auch Indizes auf gemeinsamen Spalten und regelmäßige Wartung um alte Partitionen zu archivieren oder zu löschen. Der Overhead beim Einfügen über mehrere Partitionen ist nicht zu vernachlässigen aber bei großen Tabellen oft akzeptabel.
Zitieren
#3
Ich bin mir nicht sicher ob Partitionierung allein dein Problem löst. Manchmal liegt der Flaschenhals eher in teuren Joins oder in schlecht gesetzten Indizes. Prüfe zuerst ob sinnvolle Indizes existieren und ob Abfragen Filter nutzen die Partitionierung gut unterstützen. Wenn der Lastverlauf unregelmäßig ist könnte eine Alternative wie ein dediziertes Tablespace Layout oder eine gezielte Materialisierung helfen.
Zitieren
#4
Was wenn die Sache mit der Partitionierung gar nicht das Grundproblem trifft und das eigentliche Problem in der Abfrageplanung oder in den Indizes liegt?
Zitieren
#5
Es fühlt sich an wie frische Luft nach einer langen Stauphase. Die Idee mit Partitionierung klingt kompliziert aber oft zahlt sie sich aus wenn man regelmäßig auf neue Stundenwerte stößt.
Zitieren
#6
Man könnte auch das Konzept der Unterpartitionierung ins Spiel bringen also kleinere Partitionen innerhalb der groben Zeiträume. Range oder Hash je nach Abfrageverhalten die detaillierte Umsetzung kommt später.
Zitieren
#7
Wenn du vorwiegend zeitbasierte Abfragen hast dann könnte der Blick auf Partitionierung die Abfragezeiten senken und das Löschen alter Daten vereinfachen doch die Praxis zeigt oft dass der Benefit erst mit Wartung und Planung wirklich greifbar wird.
Zitieren


[-]
Schnellantwort
Nachricht
Geben Sie hier Ihre Antwort zum Beitrag ein.

Bestätigung
Bitte den Code im Bild in das Feld eingeben. Dies ist nötig, um automatisierte Spambots zu stoppen.
Bestätigung
(Keine Beachtung von Groß- und Kleinschreibung)

Gehe zu: