Das Verhalten von Autovacuum bei ungültigen Datenbanken verstehen - Amazon Relational Database Service

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.

Das Verhalten von Autovacuum bei ungültigen Datenbanken verstehen

Ein neuer Wert -2 wird in die datconnlimit Spalte im pg_database Katalog eingefügt, um Datenbanken, die während des DROP DATABASE Vorgangs unterbrochen wurden, als ungültig kenntlich zu machen.

Dieser neue Wert ist in den folgenden Versionen von für Postgre SQL verfügbar:

  • 15.4 und alle höheren Versionen

  • 14.9 und höhere Versionen

  • 13.12 und höhere Versionen

  • 12.16 und höhere Versionen

  • 11.21 und höhere Versionen

Ungültige Datenbanken haben keinen Einfluss auf die Fähigkeit von Autovacuum, gültige Datenbanken einzufrieren. Autovacuum ignoriert ungültige Datenbanken. Folglich funktionieren reguläre Vakuumoperationen weiterhin ordnungsgemäß und effizient für alle gültigen Datenbanken in Ihrer SQL Postgre-Umgebung.

Transaktions-ID überwachen

Diese age(datfrozenxid) Funktion wird häufig verwendet, um das Alter der Transaktions-ID (XID) von Datenbanken zu überwachen, um zu verhindern, dass die Transaktions-ID umschlüsselt wird.

Da ungültige Datenbanken von der automatischen Datenabsaugung ausgenommen sind, kann ihr Transaktions-ID (XID) -Zähler den Maximalwert von erreichen 2 billion- 2 billion, bis zu diesem Wert wechseln und diesen Zyklus auf unbestimmte Zeit fortsetzen. Eine typische Abfrage zur Überwachung des Transaktions-ID-Wraparounds könnte wie folgt aussehen:

SELECT max(age(datfrozenxid)) FROM pg_database;

Mit der Einführung des Werts -2 für datconnlimit können ungültige Datenbanken jedoch die Ergebnisse dieser Abfrage verfälschen. Da diese Datenbanken nicht gültig sind und nicht Teil regelmäßiger Wartungsprüfungen sein sollten, können sie zu Fehlalarmen führen, sodass Sie glauben, dass der Wert höher age(datfrozenxid) ist, als er tatsächlich ist.

Anpassung der Überwachungsanfrage

Um eine genaue Überwachung zu gewährleisten, sollten Sie Ihre Überwachungsanfrage so anpassen, dass ungültige Datenbanken ausgeschlossen werden. Folgen Sie dieser empfohlenen Abfrage:

SELECT max(age(datfrozenxid)) FROM pg_database WHERE datconnlimit <> -2;

Diese Abfrage stellt sicher, dass nur gültige Datenbanken bei der age(datfrozenxid) Berechnung berücksichtigt werden, sodass das Alter der Transaktions-ID in Ihrer SQL Postgre-Umgebung genau wiedergegeben wird.

Das Problem mit einer ungültigen Datenbank wird behoben

Wenn Sie versuchen, eine Verbindung zu einer ungültigen Datenbank herzustellen, wird möglicherweise eine Fehlermeldung ähnlich der folgenden angezeigt:

postgres=> \c db1 connection to server at "mydb.xxxxxxxxxx.us-west-2.rds.amazonaws.com" (xx.xx.xx.xxx), port xxxx failed: FATAL: cannot connect to invalid database "db1" HINT: Use DROP DATABASE to drop invalid databases. Previous connection kept

Wenn der log_min_messages Parameter auf DEBUG2 oder höher gesetzt ist, fallen Ihnen außerdem möglicherweise die folgenden Protokolleinträge auf, die darauf hinweisen, dass der Autovacuum-Prozess die ungültige Datenbank überspringt:

2024-07-30 05:59:00 UTC::@:[32000]:DEBUG: autovacuum: skipping invalid database "db6" 2024-07-30 05:59:00 UTC::@:[32000]:DEBUG: autovacuum: skipping invalid database "db1"

Folgen Sie den HINT Anweisungen beim Verbindungsversuch, um das Problem zu beheben. Stellen Sie mit Ihrem RDS Hauptkonto oder einem Datenbankkonto mit der rds_superuser Rolle eine Connect zu einer gültigen Datenbank her und löschen Sie ungültige Datenbanken.

SELECT 'DROP DATABASE ' || quote_ident(datname) || ';' FROM pg_database WHERE datconnlimit = -2 \gexec