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.
Themen
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