Determinare se le tabelle nel database devono essere sottoposte a vacuum - 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à.

Determinare se le tabelle nel database devono essere sottoposte a vacuum

È possibile utilizzare la seguente query per mostrare il numero di transazioni non bloccate in un database. La datfrozenxid colonna della pg_database riga di un database è il limite inferiore della normale transazione che IDs appare in quel database. Questa colonna è il minimo dei valori relfrozenxid per tabella all’interno del database.

SELECT datname, age(datfrozenxid) FROM pg_database ORDER BY age(datfrozenxid) desc limit 20;

Ad esempio, i risultati dell'esecuzione della query precedente potrebbero essere i seguenti.

datname | age mydb | 1771757888 template0 | 1721757888 template1 | 1721757888 rdsadmin | 1694008527 postgres | 1693881061 (5 rows)

Quando l'età di un database raggiunge i 2 miliardi di transazioni IDs, si verifica l'aggiustamento dell'ID della transazione (XID) e il database diventa di sola lettura. Puoi utilizzare questa query per produrre un parametro ed eseguirla alcune volte al giorno. Per impostazione predefinita, l'autovacuum è impostato per mantenere l'età delle transazioni a non più di 200,000,000 (autovacuum_freeze_max_age).

Un esempio di strategia di monitoraggio potrebbe avere questo aspetto:

  • Impostare il valore autovacuum_freeze_max_age su 200 milioni di transazioni.

  • Se una tabella raggiunge 500 milioni di transazioni non bloccate, viene attivato un allarme di bassa gravità. Questo non è un valore irragionevole, ma può indicare che l'autovacuum non riesce a mantenere il passo.

  • Se una tabella invecchia a un miliardo, questo dovrebbe essere trattato come un allarme per cui intervenire. In generale, si desidera mantenere le età più vicine a autovacuum_freeze_max_age per motivi di prestazioni. Si consiglia di investigare utilizzando le raccomandazioni che seguono.

  • Se una tabella raggiunge 1,5 milioni di transazioni senza vacuum, viene attivato un allarme a gravità elevata. A seconda della velocità con cui il database utilizza la transazione IDs, questo allarme può indicare che il tempo necessario per eseguire l'autovacuum sta per scadere. In questo caso, consigliamo di risolvere il problema immediatamente.

Se una tabella superando costantemente queste soglie, modifica ulteriormente i parametri dell'autovacuum. Per impostazione predefinita, l’utilizzo manuale di VACUUM (che ha disabilitato i ritardi basati sui costi) è più aggressivo dell'autovacuum predefinito, ma è anche più intrusivo per il sistema nel suo complesso.

Consigliamo quanto segue:

  • Attiva un meccanismo di monitoraggio in modo da essere consapevole dell'età delle transazioni più vecchie.

    Per informazioni sulla creazione di un processo che ti avvisa in merito al wraparound degli ID delle transazioni, consulta il post del AWS Database Blog Implementa an early warning system for Transaction ID wraparound in Amazon RDS for PostgreSQL.

  • Per le tabelle più occupate, eseguire regolarmente un congelamento manuale del vacuum durante una finestra di manutenzione, oltre a fare affidamento sull'autovacuum. Per informazioni sull'esecuzione di un congelamento manuale del vacuum, consulta Esecuzione di un congelamento manuale del vacuum.