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à.
La seguente query può essere usata per mostrare il numero di transazioni non sottoposte a vacuum in un database. La datfrozenxid
colonna della pg_database
riga di un database è un 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 transazioniIDs, si verifica il wraparound 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 senza vacuum, 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_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 transazioneIDs, questo allarme può indicare che il sistema sta per scadere il tempo necessario per eseguire l'autovacuum. 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 VACUUM manuale (con i ritardi basati sui costi disattivati) è più aggressivo rispetto all'utilizzo dell'autovacuum predefinito, ma è anche più intrusivo per l'intero sistema.
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 sulla configurazione degli ID delle transazioni, consulta il post del blog AWS Database Implementa un sistema di avviso rapido per la configurazione degli ID delle transazioni in Amazon for
Postgre. RDS SQL -
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.