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_repack
estensione 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 FULL
CLUSTER
, 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 eseguita
pg_repack
, la tabella deve avere una chiave primaria o un indice univoco. -
pg_repack
non funzionerà con tabelle temporanee. -
pg_repack
non 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
.
|
|
Comando integrato |
Un'estensione che esegui da Amazon EC2 o dal tuo computer locale |
Richiede un |
Richiede una |
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
Avvertenza
L'error-on-invalid-index
errore in indica in pg_repack
genere che uno o più indici della tabella sono danneggiati o non validi. pg_repack
non 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 CONCURRENTLY
istruzione 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;