Ich benutze PostgreSQL 9.1 unter Ubuntu. Werden noch geplante VACUUM ANALYZE
Maßnahmen empfohlen oder ist das automatische Absaugen ausreichend, um alle Anforderungen zu erfüllen?
Wenn die Antwort "es kommt darauf an" ist, dann:
- Ich habe eine große Datenbank (30 GiB komprimierte Speichergröße, 200 GiB Datenverzeichnis)
- Ich führe ETL in die Datenbank durch und importiere fast 3 Millionen Zeilen pro Woche
- Die Tabellen mit den häufigsten Änderungen werden alle von einer Mastertabelle geerbt, ohne Daten in der Mastertabelle (Daten werden nach Woche partitioniert).
- Ich erstelle stündliche Rollups und von dort aus tägliche, wöchentliche und monatliche Berichte
Ich frage, weil der Zeitplan VACUUM ANALYZE
meine Berichterstattung beeinflusst. Es hat eine Laufzeit von mehr als 5 Stunden und ich musste es diese Woche zweimal beenden, da es die regelmäßigen Datenbankimporte beeinträchtigte. check_postgres
meldet keine nennenswerte Aufblähung in der Datenbank, das ist also kein wirkliches Problem.
In den Dokumenten sollte sich Autovacuum auch um das Umbrechen der Transaktions-ID kümmern. Die Frage steht: brauche ich noch eine VACUUM ANALYZE
?
postgresql
etl
vacuum
François Beausoleil
quelle
quelle
Antworten:
VACUUM wird nur für aktualisierte oder gelöschte Zeilen in nicht temporären Tabellen benötigt. Natürlich machen Sie viele INSERTs, aber aus der Beschreibung geht nicht hervor, dass Sie auch viele UPDATEs oder DELETEs machen.
Diese Vorgänge können mit der
pg_stat_all_tables
Ansicht verfolgt werden, insbesondere mit den Spaltenn_tup_upd
undn_tup_del
. Darüber hinaus gibt es einen_dead_tup
Spalte, die pro Tabelle angibt, wie viele Zeilen gesaugt werden müssen. ( Informationen zu Funktionen und Ansichten für die Erfassung von Statistiken finden Sie unter Überwachen von Statistiken im Dokument.)Eine mögliche Strategie in Ihrem Fall wäre, den geplanten VACUUM zu unterdrücken, diese Ansicht im Auge zu behalten und zu überprüfen, an welchen Tabellen der Anstieg
n_dead_tup
signifikant ist. Wenden Sie dann das aggressive VACUUM nur auf diese Tabellen an. Dies ist ein Gewinn, wenn es große Tabellen gibt, deren Zeilen nie gelöscht oder aktualisiert werden und das aggressive VACUUM nur bei kleineren Tabellen wirklich erforderlich ist.Führen Sie jedoch weiterhin ANALYZE aus, damit der Optimierer immer über aktuelle Statistiken verfügt.
quelle
Ich sehe in Ihrer Frage nichts,
autovacuum
worum es nicht gehen würde. Dies hängt weitgehend vom Muster Ihrer Schreibaktivitäten ab . Sie erwähnen 3 Millionen neue Zeilen pro Woche, aberINSERT
(oderCOPY
) erstellen in der Regel keinen Tabellen- und Indexüberhang. (autovacuum
Muss sich nur um Spaltenstatistiken , die Sichtbarkeitskarte und einige kleinere Jobs kümmern ).UPDATE
undDELETE
sind die Hauptursache für das Aufblähen von Tabellen und Indizes, insbesondere beim Targeting von Zufallszeilen. Ich sehe nichts davon in Ihrer Frage.autovacuum
hat einen langen Weg hinter sich und leistet in Postgres 9.1 oder höher hervorragende Arbeit. Ich würde mir dieautovacuum
Einstellungen ansehen . Wenn das Staubsaugen dazu neigt, Ihre Arbeitsbelastung zu beeinträchtigen, lesen Sie auch "Kostenbasierte Vakuumverzögerung" . Manuelles Staubsaugen sollte die seltene Ausnahme sein.Wenn Sie viele zufällige
UPDATE
s haben, möchten Sie möglicherweise einenFILLFACTOR
niedrigeren Wert als 100 festlegen , um HOT-Updates sofort zuzulassen und die Notwendigkeit für zu verringernVACUUM
. Mehr zu HOT Updates:Beachten Sie auch, dass temporäre Tabellen manuelles
VACUUM
& benötigenANALYZE
. Ich zitiere das Handbuch aufCREATE TABLE
:quelle
Ich bin damit einverstanden, dass es am besten ist, die automatischen Funktionen zu verwenden, anstatt sie datenbankweit auszuführen. In den meisten Fällen ist jedoch eine Optimierung pro Tabelle erforderlich.
Ich bin nicht ganz einverstanden mit der Wahl des Designs für Postgres, um Vakuum und Analyse zusammenzufügen. Ich habe mehrere Fälle gesehen, in denen Datenbanken, die viel einfügen / aktualisieren, aber wenig löschen, niemals analysiert werden und eine schlechte Leistung zeigen.
Die Lösung besteht darin, die Tabellen zu durchsuchen, die häufig verwendet werden und großen Abfragen unterliegen, und die Einstellungen für die automatische Analyse für diese Tabellen so festzulegen, dass sie ein oder alle zwei Tage analysiert werden.
Sie gelangen in der GUI auf der Registerkarte Auto Vakuum zu den Pro-Tisch-Einstellungen und sehen dort Analyseeinstellungen, die Sie unabhängig vom Vakuum einstellen können.
Die Einstellungen landen in der Reloptions-Tabelle und können mit der Abfrage angezeigt werden
und dort könnte ein Stichprobenwert einer aggressiven Analyse sein
Um zu sehen, wann Ihre Tabellen das letzte Mal automatisch analysiert wurden, fragen Sie ab
quelle
ANALYZE
, woher weiß PostgreSQL, dass sich die Statistiken geändert haben? Und wie können Sie feststellen, dass esANALYZE
lange dauert? Gleichzeitig ist es zwar nicht ganz klar, welche GUI Sie oben erwähnen, aber Sie haben Recht, dass bestimmte Einstellungen pro Tabelle nützlich sein können.