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.
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. Especificar FREEZE é equivalente a realizar o VACUUM com o parâmetro vacuum_freeze_min_age definido como zero. A opção FREEZE está em obsolescência e será removida em uma versão futura; em vez de utilizar esta opção deve ser definido o parâmetro vacuum_freeze_min_age.
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.
O comando VACUUM não pode ser executado dentro de um bloco de transação.
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.
O comando VACUUM causa um aumento substancial de tráfego de E/S, o que pode prejudicar o desempenho das outras sessões ativas. Portanto, algumas vezes é aconselhável utilizar a funcionalidade de atraso da limpeza baseado no custo (cost-based vacuum delay). Para obter mais informações deve ser consultada a Seção 17.4.4.
O PostgreSQL inclui a facilidade de "autovacuum" que pode automatizar a rotina de manutenção de limpeza. Para obter mais informações sobre a limpeza automática e manual deve ser consultada a Seção 22.1.
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.) |