Gestisco un grande database (alcune centinaia di concerti) contenente tabelle con vari ruoli, alcuni dei quali contengono milioni di record. Alcune tabelle ricevono solo un numero elevato di inserimenti ed eliminazioni, altri pochi inserimenti e un numero elevato di aggiornamenti.
Il database funziona su PostgreSQL 8.4 su un sistema Debian 6.0 amd64 con 16 gigabyte di RAM.
A volte la domanda è il processo di aspirazione automatica su un tavolo, il completamento richiede molto tempo (giorni). Voglio essere in grado di dire approssimativamente quanto tempo impiegherà un particolare comando del vuoto, per essere in grado di decidere se annullarlo o meno. Anche se ci fosse un indicatore di progresso per le operazioni di vuoto postgres, sarebbe davvero utile.
Modificare:
Non sto cercando una soluzione a prova di proiettile. È sufficiente un semplice suggerimento sul numero di tuple morte o byte I / O necessari per decidere. È davvero fastidioso non avere idea di quando VACUUM
finirà, qualunque cosa.
Ho visto che pg_catalog.pg_stat_all_tables
ha una colonna per il numero di tuple morte. Quindi è possibile avere una stima, anche se significa che si deve ANALYZE
prima la tabella. D'altra parte, autovacuum_vacuum_threshold
e autovacuum_vacuum_scale_factor
solo le impostazioni dimostrano che Postgres stesso sa qualcosa sulla quantità di modifiche sui tavoli e probabilmente lo mette anche nelle mani del DBA.
Non sono sicuro di quale query eseguire, perché quando eseguo VACUUM VERBOSE
, vedo che non solo le tabelle, ma anche gli indici su di esse vengono elaborati.