Preciso REINDEX e VACUUM uma tabela depois de excluir muitas linhas?

10

Estou executando um banco de dados PostgreSQL que possui várias tabelas que armazenam informações de log. Essas informações são apenas para fins de relatório e são despejadas em um arquivo e excluídas do banco de dados se houver mais de 30 dias.

Pode haver milhões de linhas excluídas e nós executamos um REINDEX todas as vezes após a exclusão.

Isso é suficiente ou também devemos executar um VACUUM ou VACUUM ANALYZE? Ou é o REINDEX não é necessário e nós devemos, em vez apenas executar um aspirador ou VACUUM ANALYZE?

Estamos usando o PostgreSQL 8.2.3, que acredito não permitir a aspiração automática.

vaqueiro
fonte
2
Você pode considerar o particionamento, consulte postgresql.org/docs/9.0/static/ddl-partitioning.html ; então você pode simplesmente soltar partições e evitar aspirar.
23410 alex
3
A versão 8.2.3 possui auto_vacuum, consulte o manual, mas você deve atualizar o mais rápido possível. A versão 8.2 atual é 8.2.17. Você tem 14 patches para trás, incluindo alguns patches de segurança. Uma atualização para 8.4 ou até 9.0 é uma idéia melhor, o auto_vacuum foi aprimorado.
precisa saber é o seguinte

Respostas:

13

Você deve executar um VACUUM ANALYZE, pois o VACUUM permitirá que o espaço usado pelos dados excluídos seja reutilizado e evite a transação envolvendo as transações, e o ANALYZE atualizará as estatísticas do planejador, o que levará a melhores planos de consulta para suas consultas de relatórios.

Teoricamente, um REINDEX não é necessário, mas você pode achar que resulta em melhor desempenho, pois o índice é contíguo.

As páginas de documentação relevantes para 8.2 estão aqui (reindexação de rotina) e aqui (aspiração de rotina) .

hmallett
fonte