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

Consigliamo vivamente di usare la caratteristica di autovacuum per mantenere l'integrità dell'istanza database di PostgreSQL. La funzione di autovaacuum automatizza l'esecuzione del comando VACUUM e ANALYZE. Verifica la presenza di tabelle con un numero elevato di tuple inserite, aggiornate o eliminate. Dopo questa verifica, recupera lo storage rimuovendo i dati obsoleti o le tuple da database PostgreSQL.

Per impostazione predefinita, l'autovacuum è attivato per le istanze RDS per PostgreSQL Aurora PostgreSQL DB create PostgreSQL DB predefiniti. Per impostazione predefinita vengono impostati anche altri parametri di configurazione associati alla caratteristica di autovacuum. Poiché questi valori di default sono in qualche modo generici, è possibile trarre vantaggio dalla regolazione di alcuni parametri associati alla caratteristica di autovacuum per il carico di lavoro specifico.

Best practice per l'utilizzo di PostgreSQLPer informazioni di alto livello, consulta.

Allocazione di memoria per il vacuum

Uno dei parametri più importanti che influenzano le prestazioni dell'autovacuum è il parametro autovacuum_work_mem. Nelle versioni 14 e autovacuum_work_mem precedenti di RDS per PostgreSQL PostgreSQL, il parametro è impostato su -1, a indicare che al suo posto viene utilizzata l'impostazione di. maintenance_work_mem Per tutte le altre versioni, autovacuum_work_mem è determinato da GREATEST ({/32768}, 65536). DBInstance ClassMemory

Le operazioni manuali di aspirazione utilizzano sempre l'maintenance_work_memimpostazione, con un'impostazione predefinita di GREATEST ({DBInstanceClassMemory/63963136 *1024}, 65536), e può anche essere regolata a livello di sessione utilizzando il comando per operazioni manuali più mirate. SET VACUUM

autovacuum_work_memDetermina che la memoria di autovacuum contenga gli identificatori delle tuple morte () per gli indici di aspirazione. pg_stat_all_tables.n_dead_tup

Quando esegui calcoli per determinare il autovacuum_work_mem valore del parametro, tieni presente quanto segue:

  • Se impostate il parametro su un valore troppo basso, il processo di sottovuoto potrebbe dover scansionare la tabella più volte per completare il suo lavoro. Queste scansioni multiple possono avere un impatto negativo sulle prestazioni Per istanze più grandi, l'impostazione maintenance_work_mem o autovacuum_work_mem su almeno 1 GB può migliorare le prestazioni delle tabelle di aspirazione con un numero elevato di tuple morte. Tuttavia, nelle versioni 16 e precedenti di PostgreSQL, l'utilizzo della memoria di vacuum è limitato a 1 GB, il che è sufficiente per elaborare circa 179 milioni di tuple morte in un unico passaggio. Se una tabella ha più tuple morte di questa, vacuum dovrà effettuare più passaggi tra gli indici della tabella, aumentando notevolmente il tempo necessario. A partire dalla versione 17 di PostgreSQL, non c'è un limite di 1 GB e autovacuum può elaborare più di 179 milioni di tuple utilizzando alberi radix.

    Un identificatore di tupla ha una dimensione di 6 byte. Per stimare la memoria necessaria per svuotare un indice di una tabella, esegui una query pg_stat_all_tables.n_dead_tup per trovare il numero di tuple morte, quindi moltiplica questo numero per 6 per determinare la memoria necessaria per svuotare l'indice in un unico passaggio. È possibile utilizzare la seguente interrogazione:

    SELECT relname AS table_name, n_dead_tup, pg_size_pretty(n_dead_tup * 6) AS estimated_memory FROM pg_stat_all_tables WHERE relname = 'name_of_the_table';
  • Il parametro autovacuum_work_mem funziona insieme al parametro autovacuum_max_workers. Ogni lavoratore autovacuum_max_workers può utilizzare la memoria allocata. Se si dispone di molte tabelle di piccole dimensioni, assegna più autovacuum_max_workers e meno autovacuum_work_mem. Se disponi di tabelle di grandi dimensioni (più grandi di 100 GB), alloca più memoria e meno processi di lavoro. Si deve avere abbastanza memoria allocata affinché si abbia esito positivo sulle tabelle più grandi. Pertanto, assicuratevi che la combinazione di processi di lavoro e memoria sia uguale alla memoria totale che desiderate allocare.

Riduzione della probabilità che si verifichi il wraparound dell’ID delle transazioni

In alcuni casi, le impostazioni del gruppo di parametri correlate all'autovacuum potrebbero non essere abbastanza aggressive da prevenire il wraparound dell'ID delle transazioni. Per risolvere questo problema, RDS for PostgreSQL Aurora PostgreSQL un meccanismo che adatta automaticamente i valori dei parametri autovacuum. L'autovacuum adattivo Una spiegazione dettagliata di Wraparound della transazione si trova nella documentazione di PostgreSQL.

rds.adaptive_autovacuum Si consiglia di tenere questa opzione attivata. Tuttavia, per disattivare l'ottimizzazione adattiva del parametro di autovacuum, impostare il parametro rds.adaptive_autovacuum su 0 o OFF.

Il wraparound degli ID di transazione è ancora possibile anche quando Amazon RDS Aurora Amazon RDS i parametri dell'autovacuum. Ti invitiamo a implementare un CloudWatch allarme Amazon per il wraparound degli ID delle transazioni. Per ulteriori informazioni, consulta il post Implementazione di un sistema di avviso rapido per il wraparound degli ID delle transazioni in RDS per PostgreSQL sul blog del database. AWS

Con l'ottimizzazione adattiva dei parametri dell'autovacuum attivata, Amazon RDS inizia a regolare i parametri dell'autovacuum quando la CloudWatch metrica MaximumUsedTransactionIDs raggiunge il valore del parametro o 500.000.000, a seconda di quale sia il maggiore. autovacuum_freeze_max_age

Amazon RDS continua ad adattare i parametri per l’autovacuum se una tabella continua a tendere verso i wraparound dell’ID della transazione. Ognuno di questi aggiustamenti dedica più risorse all’autovacuum per evitare il wraparound. Amazon RDS aggiorna i seguenti parametri correlati all’autovacuum:

RDS modifica questi parametri solo se il nuovo valore rende l’autovacuum più aggressivo. I parametri vengono modificati nella memoria sull’istanza database. I valori nel gruppo di parametri non vengono modificati. Per visualizzare le impostazioni in memoria correnti, utilizzare il comando SQL PostgreSQL SHOW.

Quando Amazon RDS modifica uno qualsiasi dei parametri autovacuum, genera un evento per l’istanza database interessata. Questo evento è visibile su AWS Management Console e tramite l'API Amazon RDS. Dopo che la MaximumUsedTransactionIDs CloudWatch metrica è tornata al di sotto della soglia, Amazon RDS ripristina i parametri relativi all'autovacuum in memoria ai valori specificati nel gruppo di parametri. Quindi genera un altro evento corrispondente a questa modifica.