VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ tabela ] VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [ tabela [ (coluna [, ...] ) ] ]
O comando VACUUM recupera a área de armazenamento ocupada pelas tuplas excluídas. Na operação normal do PostgreSQL as tuplas excluídas, ou tornadas obsoletas por causa de uma atualização, não são fisicamente removidas da tabela; permanecem presentes até o comando VACUUM ser executado. Portanto, é necessário executar o comando VACUUM periodicamente, especialmente em tabelas freqüentemente atualizadas.
Sem nenhum parâmetro, o comando VACUUM processa todas as tabelas do banco de dados corrente. Com um parâmetro, o VACUUM processa somente esta tabela.
O comando VACUUM ANALYZE executa o comando VACUUM seguido pelo comando ANALYZE para cada tabela selecionada. Esta é uma forma de combinação útil para scripts de rotinas de manutenção. Consulte o comando ANALYZE para obter mais detalhes sobre o seu processamento.
O comando VACUUM simples (sem o FULL) apenas recupera o espaço, tornando-o disponível para ser reutilizado. Esta forma do comando pode operar em paralelo com a leitura e escrita normal, porque não requer o bloqueio exclusivo da tabela. O VACUUM FULL executa um processamento mais extenso, incluindo a movimentação das tuplas entre blocos para tentar compactar a tabela no menor número de blocos de disco possível. Esta forma é muito mais lenta, e requer o bloqueio exclusivo da tabela para processá-la.
O FREEZE é uma opção com finalidade especial, que faz as tuplas serem marcadas como "congeladas" logo que possível, em vez de aguardar até estarem inteiramente antigas. Se for feito quando não houver nenhuma outra transação aberta no mesmo banco de dados, então é garantido que todas as tuplas do banco de dados sejam "congeladas", não ficando mais sujeitas aos problemas do recomeço do ID de transação, não importando quanto tempo o banco de dados seja deixado sem o comando VACUUM ser executado. O FREEZE não é recomendado para uso rotineiro. Sua única utilização pretendida é em conjunto com a preparação de bancos de dados modelo definido pelo usuário, ou outros bancos de dados inteiramente somente para leitura, que não receberão operações VACUUM na rotina de manutenção. Veja o Capítulo 21 para obter detalhes.
Quando é especificado VERBOSE, o comando VACUUM mostra mensagens de progresso indicando qual tabela está sendo processada no momento. Também são mostradas várias estatísticas sobre as tabelas.
Recomenda-se que os bancos de dados de produção ativos sejam limpos com freqüência (pelo menos toda noite), para remover as linhas expiradas. Após adicionar ou remover um grande número de linhas, aconselha-se executar o comando VACUUM ANALYZE para a tabela afetada. Este procedimento atualizará os catálogos do sistema com os resultados de todas as mudanças recentes, permitindo o planejador de comandos do PostgreSQL fazer melhores escolhas ao planejar os comandos.
A opção FULL não é recomendada para uso rotineiro, mas pode ser útil em casos especiais. Um exemplo é após ter sido excluída a maioria das linhas da tabela e deseja-se que a tabela seja fisicamente encolhida para ocupar menos espaço em disco. O comando VACUUM FULL geralmente encolhe mais a tabela que o comando VACUUM simples.
Abaixo está mostrado um exemplo da execução do comando VACUUM em uma tabela do banco de dados regression:
regression=# VACUUM VERBOSE ANALYZE onek; INFO: vacuuming "public.onek" INFO: index "onek_unique1" now contains 1000 tuples in 14 pages DETAIL: 3000 index tuples were removed. 0 index pages have been deleted, 0 are currently reusable. CPU 0.01s/0.08u sec elapsed 0.18 sec. INFO: index "onek_unique2" now contains 1000 tuples in 16 pages DETAIL: 3000 index tuples were removed. 0 index pages have been deleted, 0 are currently reusable. CPU 0.00s/0.07u sec elapsed 0.23 sec. INFO: index "onek_hundred" now contains 1000 tuples in 13 pages DETAIL: 3000 index tuples were removed. 0 index pages have been deleted, 0 are currently reusable. CPU 0.01s/0.08u sec elapsed 0.17 sec. INFO: index "onek_stringu1" now contains 1000 tuples in 48 pages DETAIL: 3000 index tuples were removed. 0 index pages have been deleted, 0 are currently reusable. CPU 0.01s/0.09u sec elapsed 0.59 sec. INFO: "onek": removed 3000 tuples in 108 pages DETAIL: CPU 0.01s/0.06u sec elapsed 0.07 sec. INFO: "onek": found 3000 removable, 1000 nonremovable tuples in 143 pages DETAIL: 0 dead tuples cannot be removed yet. There were 0 unused item pointers. 0 pages are entirely empty. CPU 0.07s/0.39u sec elapsed 1.56 sec. INFO: analyzing "public.onek" INFO: "onek": 36 pages, 1000 rows sampled, 1000 estimated total rows VACUUM