Comprensione del comportamento dell'autovacuum con database non validi - Amazon Relational Database Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Comprensione del comportamento dell'autovacuum con database non validi

-2Viene introdotto un nuovo valore nella datconnlimit colonna del pg_database catalogo per indicare come non validi i database che sono stati interrotti durante l'operazione. DROP DATABASE

Questo nuovo valore è disponibile nelle seguenti versioni di RDS SQL

  • 15.4 e tutte le versioni successive

  • 14.9 e versioni successive

  • 13.12 e versioni successive

  • 12.16 e versioni successive

  • 11.21 e versioni successive

I database non validi non influiscono sulla capacità di autovacuum di bloccare le funzionalità dei database validi. Autovacuum ignora i database non validi. Di conseguenza, le normali operazioni di vacuum continueranno a funzionare correttamente ed efficacemente per tutti i database validi nell'ambiente Postgre. SQL

Monitoraggio dell'ID della transazione

La age(datfrozenxid) funzione viene comunemente utilizzata per monitorare l'età dell'ID della transazione (XID) dei database per evitare che l'ID delle transazioni si verifichi.

Poiché i database non validi sono esclusi da autovacuum, il relativo contatore dell'ID di transazione (XID) può raggiungere il valore massimo di2 billion, completare e continuare questo ciclo all'- 2 billioninfinito. Una tipica query per monitorare il wraparound dell'ID di transazione potrebbe essere simile a:

SELECT max(age(datfrozenxid)) FROM pg_database;

Tuttavia, con l'introduzione del valore -2 perdatconnlimit, i database non validi possono alterare i risultati di questa query. Poiché questi database non sono validi e non devono essere sottoposti a regolari controlli di manutenzione, possono causare falsi positivi, inducendo a credere che il valore age(datfrozenxid) sia superiore a quello reale.

Regolazione della query di monitoraggio

Per garantire un monitoraggio accurato, è necessario modificare la query di monitoraggio in modo da escludere database non validi. Segui questa query consigliata:

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

Questa query assicura che nel age(datfrozenxid) calcolo vengano presi in considerazione solo i database validi, fornendo un riscontro fedele dell'età degli ID delle transazioni nell'ambiente Postgre. SQL

Risoluzione del problema relativo al database non valido

Quando si tenta di connettersi a un database non valido, è possibile che venga visualizzato un messaggio di errore simile al seguente:

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

Inoltre, se il log_min_messages parametro è impostato su DEBUG2 o superiore, è possibile che vengano visualizzate le seguenti voci di registro che indicano che il processo autovacuum sta ignorando il database non valido:

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"

Per risolvere il problema, segui le istruzioni HINT fornite durante il tentativo di connessione. Connettiti a qualsiasi database valido utilizzando il tuo account RDS master o un account di database con il rds_superuser ruolo ed elimina i database non validi.

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