Risoluzione dei blocchi non identificabili per i processi di vacuum in Aurora PostgreSQL - Amazon Aurora

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

Risoluzione dei blocchi non identificabili per i processi di vacuum in Aurora PostgreSQL

Questa sezione esplora ulteriori motivi che possono impedire l’avanzamento del processo di autovacuum. Al momento tali problemi non sono direttamente identificabili tramite la funzione postgres_get_av_diag().

Incoerenza dell’indice

Un indice logicamente incoerente può impedire il progresso del processo di autovacuum. I seguenti errori o errori simili vengono registrati durante la fase di vacuum dell’indice o quando si accede all’indice tramite istruzioni SQL.

ERROR: right sibling's left-link doesn't match:block 5 links to 10 instead of expected 2 in index ix_name
ERROR: failed to re-find parent key in index "XXXXXXXXXX" for deletion target page XXX CONTEXT: while vacuuming index index_name of relation schema.table

Linea guida

Crea nuovamente l’indice o salta gli indici utilizzando INDEX_CLEANUP sul VACUUM FREEZE manuale.

  • Utilizzo dell’opzione CONCURRENTLY: prima della versione 12 di PostgreSQL, per creare nuovamente un indice era richiesto un blocco di tabella esclusivo, che limitava l’accesso alla tabella Con la versione 12 di PostgreSQL e le versioni successive, l’opzione CONCURRENTLY consente di eseguire il blocco a livello di riga e ciò migliora la disponibilità della tabella in modo significativo. Il comando è il seguente:

    REINDEX INDEX ix_name CONCURRENTLY;

    Sebbene CONCURRENTLY sia meno dannoso, può funzionare più lentamente sulle tabelle più utilizzate. Se possibile, valuta la possibilità di creare l’indice durante i periodi di traffico ridotto. Per ulteriori informazioni, consulta la sezione dedicata a REINDEX nella documentazione di PostgreSQL.

  • Utilizzo dell’opzione INDEX_CLEANUP FALSE: se gli indici sono di grandi dimensioni e si stima che richiedano un lungo lasso di tempo per completare l’operazione, puoi sbloccare l’autovacuum eseguendo un VACUUM FREEZE manuale escludendo gli indici. Questa funzionalità è disponibile in PostgreSQL 12 e versioni successive.

    Bypassare gli indici ti consentirà di saltare il processo di vacuum dell’indice incoerente e mitigare il problema di wraparound. Tuttavia, ciò non risolverà il problema sottostante relativo alla pagina non valida. Per risolvere completamente il problema relativo alla pagina non valida, dovrai comunque creare di nuovo l’indice.

Tasso di transazione eccezionalmente elevato

In PostgreSQL, i tassi di transazione elevati possono influire in modo significativo sulle prestazioni di autovacuum, portando a una pulizia più lenta delle tuple inattive e a un aumento del rischio di wraparound dell’ID di transazione. È possibile monitorare il tasso di transazione misurando la differenza in max(age(datfrozenxid)) tra due periodi di tempo, in genere al secondo. Inoltre, puoi utilizzare le seguenti metriche dei contatori di Approfondimenti sulle prestazioni di RDS per misurare il tasso di transazione (la somma di xact_commit e xact_rollback) che è il numero totale delle transazioni.

Contatore Tipo Unità Parametro

xact_commit

Transazioni

Commit al secondo

db.Transactions.xact_commit

xact_rollback

Transazioni

Rollback al secondo

db.Transactions.xact_rollback

Un aumento rapido indica un carico di transazioni elevato, che può sovraccaricare il processo di autovacuum, con conseguenti aumento di dimensioni, conflitti di blocco e potenziali problemi di prestazioni. Ciò può influire negativamente sul processo di autovacuum in due modi:

  • Attività delle tabelle: la tabella specifica in fase di vacuum potrebbe registrare un volume elevato di transazioni, con conseguenti ritardi.

  • Risorse di sistema: l’intero sistema potrebbe essere sovraccarico e ciò rende difficile per l’autovacuum accedere alle risorse necessarie per garantire un funzionamento efficiente.

Esamina le seguenti strategie per consentire all’autovacuum di funzionare in modo più efficace e tenere il passo con le sue attività:

  1. Riduzione, se possibile, del tasso di transazioni. Possibilità di raggruppare le transazioni simili, ove applicabile.

  2. Concentrazione delle tabelle aggiornate di frequente con operazioni VACUUM FREEZE manuali con frequenza notturna, settimanale o bisettimanale nelle ore non di punta.

  3. Possibilità di aumentare verticalmente la classe di istanza per allocare più risorse di sistema al fine di gestire l’elevato volume di transazioni e l’autovacuum.