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
La seguente query può essere utilizzata per mostrare il numero di transazioni sbloccate in un database. La colonna datfrozenxid di una riga di database pg_database è il margine inferiore sui normali ID di transazione che appaiono nel 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 due miliardi di ID di transazioni, si verifica il wraparound dell’ID della transazione (XID) e il database entra in modalità 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_agesu 200 milioni di transazioni. -
Se una tabella raggiunge 500 milioni di transazioni sbloccate, viene attivato un allarme a 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_ageper 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 gli ID delle transazioni, questo allarme può indicare che il tempo del sistema 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 fornisce avvisi sul wraparound degli ID transazione, consulta il post nel blog di AWS Database Implementazione di un sistema di avvisi rapidi per il wraparound degli ID transazione 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.