Wir haben eine Postgres-Datenbank mit relativ geringem Volumen und kontinuierlicher Archivierung eingerichtet, um jedes WAL-Segment zu komprimieren und an S3 zu senden. Da es sich um ein System mit geringem Volumen handelt, trifft es etwa archive_timeoutalle 10 Minuten und archiviert das meist nicht verwendete WAL-Segment, das früher sehr gut komprimiert wurde, da es meist nur Nullen waren.
Postgres recycelt jedoch seine WAL-Segmente, um die Kosten für die Zuweisung neuer Dateien an jedem WAL-Switch zu vermeiden. Dies ist in einer Situation mit hoher Auslastung nützlich, bedeutet jedoch, dass unsere WAL-Segmentdateien nach einem Ausbruch überdurchschnittlicher Aktivitäten jetzt voll sind von Müll aus früheren Segmenten und überhaupt nicht sehr gut komprimieren. Wir speichern viele Kopien dieses ganzen Mülls.
Gibt es eine Möglichkeit, den Speicherplatz für unser WAL-Archiv zu reduzieren? Einige suboptimale Möglichkeiten:
Verhindern Sie, dass Postgres die WAL-Segmente irgendwie recycelt, und beginnen Sie jedes Mal mit einer auf Null gesetzten Datei. Die Dokumente geben nicht an, dass es eine Option dafür gibt, aber ich habe sie möglicherweise verpasst.
Lassen Sie Postgres die WAL-Segmentdatei auf Null setzen, wenn sie verwendet / beendet wird. Auch hier scheinen die Dokumente nicht darauf hinzudeuten, dass dies möglich ist.
Stellen Sie einige der WAL-Segmentdateien extern auf Null oder entfernen Sie sie, während sie nicht verwendet werden. Gibt es eine sichere Möglichkeit, um festzustellen, um welche Dateien es sich handelt?
Setzen Sie den nicht verwendeten Teil des Segments auf Null, bevor Sie es mit der Ausgabe von archivieren,
pg_xlogdumpum herauszufinden, wo der Junk beginnt. Möglich, obwohl ich es nicht mag. Zumindest wenn Sie dies im Befehl archive tun, können Sie sicher sein, dass Postgres die Datei nicht wiederverwendet.Archivieren Sie nur den verwendeten Teil der Segmentdatei, indem Sie die Ausgabe von
pg_xlogdumpirgendwie erneut interpretieren und sie dann während der Wiederherstellung mit Nullen auffüllen. Klingt auch möglich, obwohl ich es nicht wirklich mag.