Posted on: August 12, 2020 09:18 AM
Posted by: Renato
Categories: postgresql
Views: 5966
VACUUM
Nome
VACUUM -- limpa e opcionalmente analisa um banco de dados
Sinopse
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ tabela ] VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [ tabela [ (coluna [, ...] ) ] ]
Descrição
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.
Parâmetros
- FULL
-
Seleciona uma limpeza "completa", que pode recuperar mais espaço, mas é muito mais demorada e bloqueia a tabela no modo exclusivo.
- FREEZE
-
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.
- VERBOSE
-
Mostra, para cada tabela, um relatório detalhado da atividade de limpeza.
- ANALYZE
-
Atualiza as estatísticas utilizadas pelo planejador para determinar o modo mais eficiente de executar um comando.
- tabela
-
O nome (opcionalmente qualificado pelo esquema) da tabela específica a ser limpa. Por padrão todas as tabelas do banco de dados corrente.
- coluna
-
O nome da coluna específica a ser analisada. Por padrão todas as colunas.
Saídas
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.
Observações
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.
Exemplos
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
Compatibilidade
Não existe o comando VACUUM no padrão SQL.
O Comando Vacuum
É fortemente recomendável para melhor desempenho e aproveitamento do espaço de armazenamento secundário do seu banco de dados que se faça a execução periódica do comando VACUUM.
Este comando reaproveita espaços em branco deixados pelas atualizações e exclusões de registros (fragmentação interna) e pode ser utilizado para atualização das estatísticas para planejamento e otimização de consultas.
As alterações de registros produzem novas versões dos dados no banco em virtude do protocolo de controle de concorrência multiversão, as quais não são fisicamente excluídas após a execução das transações, causando aumento de espaço utilizado. A exclusão de registros também não elimina imediatamente os dados, proporcionando melhor desempenho para deleções. Em ambos os casos o espaço não utilizado é liberado com a execução deste comando.
Adicionalmente, o comando pode atualizar as estatísticas do banco de dados, permitindo planos de execução de consultas melhor otimizados e melhorando o desempenho do sistema como um todo.
Em ambientes com grande quantidade de dados submetidos a muitas alterações, exclusões e inclusões de dados, o comando Vacuum pode trazer resultados significativos.
Sintaxe:
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ table ]
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [ table [ (column [, ...] ) ] ]
Exemplos:
- VACUUM
Sintaxe mais simples. Libera o espaço bloqueado para uso, mas não restringe as leituras e escritas ao banco durante o processo (não bloqueia tabelas durante a reorganização). Não compacta os dados eliminando a fragmentação interna. Apenas libera os espaços para utilização.
- VACUUM FULL
Libera o espaço bloqueado para uso, movendo registros e ocupando os espaços disponíveis dentro dos blocos. Restringe as leituras e escritas ao banco, pois bloqueia objetos durante a sua execução. Como resultado final, compacta os dados eliminando a fragmentação interna.
- VACUUM (FULL) VERBOSE
Efetua o VACUUM, tanto o normal quanto o FULL, apresentando um relatório detalhado das operações realizadas. A opção FULL não diminui índices, o que é feito pelo comando REINDEX.
- VACUUM (FULL) ANALYSE
Efetua o VACUUM, tanto o normal quanto o FULL, atualizando as estatísticas utilizadas na otimização das consultas.
- VACUUM (FULL) TABELA
Efetua o VACUUM, tanto o normal quanto o FULL, na tabela fornecida. Opção recomendada quando se demanda maior controle sobre o processo de reorganização do banco de dados.
- http://postgresqlbr.blogspot.com/2007/05/o-comando-vacuum.html
Donate to Site
Renato
Developer