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. [1]
Sem nenhum parâmetro, o comando VACUUM processa todas as tabelas do banco de dados corrente. Com um parâmetro, o comando VACUUM processa somente esta tabela.
O comando VACUUM ANALYZE executa o VACUUM e depois o ANALYZE para cada tabela selecionada. Esta é uma forma de combinação útil para scripts de rotinas de manutenção. Para obter mais detalhes sobre o seu processamento deve ser consultado o comando ANALYZE.
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 da tabela, porque não é obtido um bloqueio exclusivo. 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 de cada tabela enquanto está sendo processada.
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. Consulte o Capítulo 21 para obter detalhes.
Seleciona uma limpeza "completa", que pode recuperar mais espaço, mas é muito mais demorada e bloqueia a tabela no modo exclusivo.
Seleciona um "congelamento" agressivo das tuplas.
Mostra, para cada tabela, um relatório detalhado da atividade de limpeza.
Atualiza as estatísticas utilizadas pelo planejador para determinar o modo mais eficiente de executar um comando.
O nome (opcionalmente qualificado pelo esquema) da tabela específica a ser limpa. Por padrão todas as tabelas do banco de dados corrente.
O nome da coluna específica a ser analisada. Por padrão todas as colunas.
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 é quando se exclui a maioria das linhas da tabela e se deseja que a tabela seja fisicamente contraída para ocupar menos espaço em disco. O comando VACUUM FULL geralmente contrai 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 de regressão:
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
[1] |
Oracle — A reorganização do armazenamento físico da tabela para recuperar o espaço não utilizado é um processo manual. Primeiro deverá ser ativado para a tabela a reorganização do segmento da tabela, utilizando a opção ENABLE ROW MOVEMENT do comando SQL ALTER TABLE. Depois, os dados no segmento da tabela poderão ser consolidados utilizando a opção SHRINK SPACE do comando ALTER TABLE. Hands-On Oracle Database 10g Express Edition for Linux — Steve Bobrowski, pág. 354 (N. do T.) |