Rimuovere il bloat con pg_repack - AWS Guida prescrittiva

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

Rimuovere il bloat con pg_repack

Puoi utilizzare l'pg_repackestensione per rimuovere il gonfiore di tabelle e indici con un blocco minimo del database. Puoi creare questa estensione nell'istanza del database ed eseguire il pg_repack client (dove la versione del client corrisponde alla versione dell'estensione) da Amazon Elastic Compute Cloud (Amazon EC2) o da un computer in grado di connettersi al database.

Al contrarioVACUUM FULL, pg_repack non richiede tempi di inattività o una finestra di manutenzione e non blocca altre sessioni.

pg_repackè utile in situazioni in cui VACUUM FULLCLUSTER, o REINDEX potrebbe non funzionare. Crea una nuova tabella che contiene i dati della tabella gonfia, tiene traccia delle modifiche rispetto alla tabella originale e quindi sostituisce la tabella originale con quella nuova. Non blocca la tabella originale per le operazioni di lettura o scrittura durante la creazione della nuova tabella.

È possibile utilizzarlo pg_repack per una tabella completa o per un indice. Per visualizzare un elenco di attività, consulta la documentazione di pg_repack.

Restrizioni:

  • Per essere eseguitapg_repack, la tabella deve avere una chiave primaria o un indice univoco.

  • pg_repack non funzionerà con tabelle temporanee.

  • pg_repacknon funzionerà su tabelle con indici globali.

  • Quando pg_repack è in corso, non è possibile eseguire operazioni DDL sulle tabelle.

Nella tabella seguente vengono descritte le differenze tra pg_repack eVACUUM FULL.

VACUUM FULL

pg_repack

Comando integrato

Un'estensione che esegui da Amazon EC2 o dal tuo computer locale

Richiede un ACCESS EXCLUSIVE lucchetto mentre funziona su un tavolo

Richiede una ACCESS EXCLUSIVE serratura solo per un breve periodo

Funziona con tutti i tavoli

Funziona solo su tabelle con chiavi primarie e univoche

Richiede il doppio dello spazio di archiviazione utilizzato dalla tabella e dagli indici

Richiede il doppio dello spazio di archiviazione utilizzato dalla tabella e dagli indici

Per eseguire pg_repack su una tabella, usa il comando:

pg_repack -h <host> -d <dbname> --table <tablename> -k

Per eseguire pg_repack su un indice, usa il comando:

pg_repack -h <host> -d <dbname> --index <index name>

Per ulteriori informazioni, consulta il post del AWS blog Rimuovere bloat da Amazon Aurora e RDS per PostgreSQL con pg_repack.

Avvertenza

L'error-on-invalid-indexerrore in indica in pg_repack genere che uno o più indici della tabella sono danneggiati o non validi. pg_repacknon può operare in modo sicuro su tabelle con indici non validi, poiché si basa sugli indici per la coerenza dei dati durante il processo di repack.

Questo errore si verifica quando:

  • L'indice è contrassegnato come non valido (ad esempio, a causa di un'CREATE INDEX CONCURRENTLYistruzione non riuscita).

  • L'indice è danneggiato (probabilmente a causa di problemi hardware o arresti improvvisi).

Usa la seguente query per identificare gli indici non validi e per eliminarli per primi se li trovi.

SELECT indexrelid::regclass, indisvalid FROM pg_index WHERE indrelid = 'orders'::regclass AND NOT indisvalid; Drop the invalid index: DROP INDEX index_name;