Devo REINDEX e VACUUM una tabella dopo aver eliminato molte righe?


10

Sto eseguendo un database PostgreSQL che ha diverse tabelle che memorizzano le informazioni di registrazione. Queste informazioni sono solo a scopo di reportistica e vengono scaricate in un file e cancellate dal database se più vecchie di 30 giorni.

Possono essere eliminate milioni di righe e abbiamo eseguito REINDEX ogni volta dopo l'eliminazione.

È sufficiente o dovremmo anche eseguire un VACUUM o VACUUM ANALYZE? Oppure REINDEX non è necessario e dovremmo invece semplicemente eseguire un VACUUM o VACUUM ANALYZE?

Stiamo usando PostgreSQL 8.2.3, che a mio avviso non consente l'aspirazione automatica.


2
Potresti prendere in considerazione il partizionamento, vedi postgresql.org/docs/9.0/static/ddl-partitioning.html ; quindi puoi semplicemente rilasciare le partizioni ed evitare l'aspirazione.
alex,

3
La versione 8.2.3 ha auto_vacuum, consultare il manuale, ma è necessario aggiornare al più presto. La versione 8.2 attuale è 8.2.17. Ti mancano 14 patch, tra cui un paio di patch di sicurezza. Un aggiornamento a 8.4 o addirittura 9.0 è un'idea migliore, auto_vacuum è stato migliorato.
Frank Heikens,

Risposte:


13

È necessario eseguire un'ANALISI SOTTOVUOTO poiché VACUUM consentirà di riutilizzare lo spazio utilizzato dai dati eliminati e impedire il riepilogo delle transazioni e ANALYZE aggiornerà le statistiche del pianificatore che dovrebbero portare a piani di query migliori per le query dei rapporti.

Un REINDEX non è teoricamente richiesto, ma potresti riscontrare prestazioni migliori poiché l'indice è contiguo.

Le pagine di documentazione pertinenti per 8.2 sono qui (reindicizzazione di routine) e qui (aspirapolvere di routine) .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.