Abbiamo un prodotto che utilizza il server di database PostgreSQL distribuito in un paio di centinaia di client. Alcuni di questi hanno raccolto decine di gigabyte di dati nel corso degli anni. Quindi nella prossima versione introdurremo procedure di pulizia automatica che archivieranno gradualmente e vecchi record DELETE durante i processi batch notturni.PostgresQL Automazione di VACUUM FULL per tavoli gonfiati
Se ho capito correttamente, autovacuum eseguirà l'avvio e analizzerà e riorganizzerà le tuple, quindi le prestazioni saranno come quando esistevano meno record.
Lo spazio disco effettivo non sarà rilasciato, se comprendo correttamente, poiché questo si verifica solo con un VACUUM FULL, e che non è attivato da autovacuum.
Quindi stavo pensando a un processo automatizzato che lo avrebbe fatto.
Ho trovato la vista ingrandita che viene utilizzata da nagios check_postgres a http://wiki.postgresql.org/wiki/Show_database_bloat.
Questa visualizzazione è valida? Ho ragione nel capire che se il tbloat è> 2, potrebbe usare un VACUUM PIENO? E se il ibloat è troppo alto, potrebbe utilizzare un REINDEX?
Eventuali commenti sul seguente lavoro da eseguire come lavoro batch giornaliero?
vacuumdb -Z mydatabase
#vacuum con analizzare soloselect tablename from bloatview order by tbloat desc limit 1
vacuumdb -f -t tablename mydatabase
select tablename, iname from bloatview order by ibloat desc limit 1
reindexdb -t tablename -i iname mydatabase
Fuori rotta, ho ancora bisogno di avvolgerlo in un bel script perl in crontab (stiamo usando Ubuntu 12), o Postgresql ha qualche tipo di scheduler potrei farlo?
O è questo totale eccessivo e c'è una procedura molto più semplice?
vacuumdb -Z probabilmente non è necessario, l'autovacuum sembra fare un ottimo lavoro per mantenere l'analisi aggiornata. – greyfairer