Gerencio um grande banco de dados (algumas centenas de shows) contendo tabelas com várias funções, algumas delas com milhões de registros. Algumas tabelas recebem apenas um grande número de inserções e exclusões, outras poucas inserções e grande número de atualizações.
O banco de dados é executado no PostgreSQL 8.4 em um sistema Debian 6.0 amd64 com 16 gigabytes de RAM.
A questão é, às vezes, o processo de autovacuum em uma tabela, que leva muito tempo (dias) para ser concluído. Quero poder dizer quanto tempo um determinado comando a vácuo levará para poder decidir se o cancelo ou não. Além disso, se houvesse um indicador de progresso para as operações de vácuo do postgres, seria realmente útil.
Editar:
Não estou procurando uma solução à prova de balas. Apenas uma dica aproximada sobre o número de tuplas mortas ou bytes de E / S necessários é suficiente para decidir. É realmente irritante não ter idéia de quando VACUUM
vai terminar, qualquer que seja.
Eu vi que pg_catalog.pg_stat_all_tables
tem uma coluna para o número de tuplas mortas. Portanto, é possível ter uma estimativa, mesmo que isso signifique que a pessoa tenha que estar ANALYZE
na tabela antes. Por outro lado, autovacuum_vacuum_threshold
e autovacuum_vacuum_scale_factor
as configurações sozinho provar que postgres si sabe algo sobre a quantidade de mudança nas mesas e provavelmente coloca nas mãos do DBA também.
Não tenho certeza de qual consulta executar, porque quando executo VACUUM VERBOSE
, vejo que não apenas as tabelas, mas os índices nelas também estão sendo processados.