A documentação oficial aqui me pareceu bastante enigmática. https://www.postgresql.org/docs/13/routine-vacuuming.html#AUTOVACUUM
Alguém pode oferecer uma explicação do que acontece sob o capô durante o vácuo automático ou o vácuo acionado manualmente?
O processo do autovacuum launcher é ativado regularmente e determina – com base nos dados estatísticos
pg_stat_all_tables
e naspg_class
configurações de certos parâmetros – se uma tabela precisa serVACUUM
ed ouANALYZE
d. Se sim, ele inicia um processo de trabalho de autovacuum que executa a operação necessária.VACUUM
faz muitas coisas. O procedimento básico é:digitalizar a tabela para versões de linhas mortas
verifique todos os índices e remova as referências a essas versões de linhas mortas
digitalize a tabela novamente para remover as versões de linhas inativas encontradas na primeira etapa
se ainda não terminarmos com a tabela, repita todo o processo
Nas linhas laterais, ele também faz essas coisas:
atualizar estatísticas da tabela em
pg_class
atualizar o “mapa de espaço livre”, para que
INSERT
s eUPDATE
s saibam onde encontrar um bloco com espaço livre suficienteatualizar o “mapa de visibilidade” para que o PostgreSQL possa realizar varreduras eficientes somente de índice
“congelar” todas as linhas ativas com mais de uma certa idade para permitir que o contador de ID de transação seja concluído sem perda de dados