Lösung nicht identifizierbarer Vakuumblocker in für PostgreSQL Aurora PostgreSQL - Amazon Aurora

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Lösung nicht identifizierbarer Vakuumblocker in für PostgreSQL Aurora PostgreSQL

In diesem Abschnitt werden weitere Gründe untersucht, die verhindern können, dass das Staubsaugen voranschreitet. Diese Probleme sind derzeit anhand der Funktion nicht direkt identifizierbar. postgres_get_av_diag()

Inkonsistenz im Index

Ein logisch inkonsistenter Index kann verhindern, dass das Autovakuumverfahren voranschreitet. Die folgenden oder ähnliche Fehler werden entweder während der Vakuumphase des Indexes oder beim Zugriff auf den Index durch SQL-Anweisungen protokolliert.

ERROR: right sibling's left-link doesn't match:block 5 links to 10 instead of expected 2 in index ix_name
ERROR: failed to re-find parent key in index "XXXXXXXXXX" for deletion target page XXX CONTEXT: while vacuuming index index_name of relation schema.table

Anleitung

Erstellen Sie den Index manuell VACUUM FREEZE neu oder überspringen Sie INDEX_CLEANUP Indizes.

  • Verwenden der Option CONCURRENTLY — Vor PostgreSQL Version 12 erforderte die Neuerstellung eines Indexes eine exklusive Tabellensperre, die den Zugriff auf die Tabelle einschränkte. Bei PostgreSQL Version 12 und späteren Versionen ermöglicht die Option CONCURRENTLY das Sperren auf Zeilenebene, wodurch die Verfügbarkeit der Tabelle erheblich verbessert wird. Es folgt der Befehl:

    REINDEX INDEX ix_name CONCURRENTLY;

    CONCURRENTLY ist zwar weniger störend, kann aber bei stark frequentierten Tabellen langsamer sein. Erwägen Sie, den Index nach Möglichkeit in Zeiten mit geringem Datenverkehr zu erstellen. Weitere Informationen finden Sie unter REINDEX in der PostgreSQL-Dokumentation.

  • Verwendung der Option INDEX_CLEANUP FALSE — Wenn die Indizes umfangreich sind und schätzungsweise viel Zeit bis zur Fertigstellung in Anspruch nehmen, können Sie die automatische Bereinigung aufheben, indem Sie einen manuellen Befehl mit dem Befehl VACUUM FREEZE ausführen und dabei Indizes ausschließen. Diese Funktionalität ist in PostgreSQL Version 12 und späteren Versionen verfügbar.

    Durch das Umgehen von Indizes können Sie den Vakuumprozess des inkonsistenten Indexes überspringen und das Wraparound-Problem verringern. Das zugrundeliegende Problem mit ungültigen Seiten wird dadurch jedoch nicht gelöst. Um das Problem mit der ungültigen Seite vollständig zu beheben und zu lösen, müssen Sie den Index dennoch neu erstellen.

Außergewöhnlich hohe Transaktionsrate

In PostgreSQL können hohe Transaktionsraten die Leistung von Autovacuum erheblich beeinträchtigen, was zu einer langsameren Bereinigung toter Tupel und einem erhöhten Risiko eines Transaktions-ID-Wraparounds führt. Sie können die Transaktionsrate überwachen, indem Sie den Unterschied max(age(datfrozenxid)) zwischen zwei Zeiträumen messen, typischerweise pro Sekunde. Darüber hinaus können Sie die folgenden Zählermetriken von RDS Performance Insights verwenden, um die Transaktionsrate (die Summe aus xact_commit und xact_rollback) zu messen, die die Gesamtzahl der Transaktionen darstellt.

Zähler Typ Einheit Metrik

xact_commit

Transaktionen

Commits pro Sekunde

db.Transactions.xact_commit

xact_rollback

Transaktionen

Rollbacks pro Sekunde

db.Transactions.xact_rollback

Ein schneller Anstieg deutet auf eine hohe Transaktionslast hin, die Autovacuum überfordern und zu Blähungen, Sperrkonflikten und potenziellen Leistungsproblemen führen kann. Dies kann sich auf verschiedene Weise negativ auf den Autovakuumprozess auswirken:

  • Tabellenaktivität: Bei der spezifischen Tabelle, die gelöscht wird, kann es zu einem hohen Transaktionsvolumen kommen, was zu Verzögerungen führen kann.

  • Systemressourcen Das gesamte System ist möglicherweise überlastet, sodass es für Autovacuum schwierig ist, auf die Ressourcen zuzugreifen, die für einen effizienten Betrieb erforderlich sind.

Ziehen Sie die folgenden Strategien in Betracht, damit das Autovakuumgerät effektiver arbeiten und seine Aufgaben erfüllen kann:

  1. Reduzieren Sie nach Möglichkeit die Transaktionsrate. Erwägen Sie, ähnliche Transaktionen nach Möglichkeit zu stapeln oder zu gruppieren.

  2. Nehmen Sie häufig aktualisierte Tabellen ins Visier und verwenden Sie die manuelle VACUUM FREEZE Bedienung jede Nacht, Woche oder alle zwei Wochen außerhalb der Spitzenzeiten.

  3. Erwägen Sie, Ihre Instance-Klasse zu skalieren, um mehr Systemressourcen für das hohe Transaktionsvolumen und die automatische Bereinigung bereitzustellen.