0Pricing
SQL Academy · Aula

VACUUM, autovacuum, vacuum_cost_delay

Ajuste os limites do autovacuum, vacuum_cost_delay e o VACUUM paralelo para tabelas grandes.

VACUUM, autovacuum, vacuum_cost_delay é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.

Três modos de VACUUM

  • VACUUM (preguiçoso) — recupera espaço das linhas obsoletas, atualiza o mapa de espaço livre e não usa bloqueio exclusivo
  • VACUUM FULL — reescreve a tabela; usa bloqueio exclusivo; devolve o espaço em disco ao OS
  • VACUUM ANALYZE — executa o VACUUM e atualiza as estatísticas do planejador de uma só vez

Executando VACUUM manualmente

Às vezes, isso é útil mesmo com o VACUUM automático:

VACUUM (VERBOSE) orders;
VACUUM (VERBOSE, ANALYZE) orders;
VACUUM (PARALLEL 4) orders;       -- parallel index cleanup (PG 13+)

Processo do VACUUM automático

Um inicializador em segundo plano cria processos de trabalho que executam VACUUM nas tabelas que ultrapassam os limites. Por padrão, alguns processos de trabalho cuidam do cluster.

Ajuste por tabela

Tabelas muito atualizadas se beneficiam de um VACUUM automático agressivo:

ALTER TABLE busy_table SET (
  autovacuum_vacuum_scale_factor = 0.05,    -- 5% dead vs default 20%
  autovacuum_vacuum_threshold    = 1000,
  autovacuum_analyze_scale_factor = 0.05
);

vacuum_cost_delay

Limita a E/S do VACUUM para não prejudicar as consultas em primeiro plano. O padrão do PG 12+ é 2 ms — geralmente adequado. Em SSDs, é possível reduzi-lo:

autovacuum_vacuum_cost_delay = 2ms
-- Lower delay = faster vacuum, more I/O usage.
-- Set per-table for hot tables that need faster cleanup.

VACUUM paralelo

Desde o PG 13, o VACUUM paraleliza a limpeza de índices:

VACUUM (PARALLEL 4) big_table;
-- Each index cleaned by a parallel worker (up to max_parallel_maintenance_workers).

VACUUM FULL: quando e por quê

Reescreve a tabela do zero — devolve espaço ao OS. Adquire ACCESS EXCLUSIVE. Use apenas como último recurso ou prefira pg_repack.

VACUUM FULL orders;
-- Locks orders; rewrites; on huge tables this is hours of downtime.

pg_repack: alternativa on-line

Reescreve uma tabela on-line — sem bloqueio total. Tem o mesmo efeito que VACUUM FULL, mas é adequado para produção:

pg_repack -d mydb -t orders
-- Builds a shadow table, sync, swaps in.

Monitorando o VACUUM automático

Veja os horários do último VACUUM e ANALYZE e as contagens de tuplas obsoletas:

SELECT relname,
       n_live_tup, n_dead_tup,
       last_autovacuum, last_autoanalyze
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC;

Quando o VACUUM automático fica para trás

Sintomas:

  • O inchaço aumenta
  • n_dead_tup alto em pg_stat_user_tables
  • Os planos de consulta pioram

Correções: aumente autovacuum_max_workers, reduza o fator de escala por tabela e corrija as transações longas que bloqueiam o VACUUM.

Registro do VACUUM

Para fazer ajustes, registre os VACUUMs lentos:

log_autovacuum_min_duration = '500ms'
-- Logs every autovacuum action that took longer than 500ms.

FREEZE

O VACUUM ocasionalmente "congela" tuplas antigas para evitar o estouro de xid. Um VACUUM automático agressivo mantém baixas as idades de congelamento e evita eventos emergenciais de estouro.

Recapitulação

O VACUUM automático é essencial; ajuste-o conforme a carga de trabalho.

  • Configurações de VACUUM automático por tabela para tabelas muito atualizadas
  • VACUUM FULL é o último recurso — prefira pg_repack
  • Monitore n_dead_tup e last_autovacuum
  • Corrija as transações longas que bloqueiam a limpeza

Verificação rápida

Qual é a maneira mais segura de recuperar espaço em disco em uma tabela de produção muito atualizada sem um bloqueio prolongado?

Perguntas Frequentes

A aula “VACUUM, autovacuum, vacuum_cost_delay” é grátis?

Sim — o texto completo de “VACUUM, autovacuum, vacuum_cost_delay” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.

O que vou aprender em “VACUUM, autovacuum, vacuum_cost_delay”?

Ajuste os limites do autovacuum, vacuum_cost_delay e o VACUUM paralelo para tabelas grandes. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar SQL Academy?

Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “VACUUM, autovacuum, vacuum_cost_delay”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de SQL Academy?

Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. MVCC e causas da fragmentação
  2. VACUUM, autovacuum, vacuum_cost_delay
  3. ANALYZE e pg_statistic
  4. Varreduras somente por índice e mapa de visibilidade
← Voltar para SQL Academy