Explicar a finalidade da aspiração e da aspiração automática

Concluído

Quando uma linha é atualizada, cada atualização é composta por uma inserção e uma exclusão. Os dados modificados são inseridos e a linha antiga é excluída. No PostgreSQL, a linha original é mantida para que uma transação possa reverter se houver um problema. Em vez de excluir a linha original, ela é marcada para exclusão posterior, resultando em linhas "mortas" (ou tuplas) que ainda estão em disco, mas não são mais necessárias.

O processo de aspiração apropriadamente nomeado remove permanentemente essas linhas, atualizando estatísticas e recuperando espaço que, de outro modo, poderia ser perdido.

O processo de limpeza das linhas mortas é chamado de processo de aspiração. Se essas linhas fossem deixadas no disco, o banco de dados ocuparia mais espaço em disco do que o necessário, conhecido como "sobrecarga" do banco de dados. O processo VACUUM é importante pelos seguintes motivos:

  • Para recuperar o espaço em disco ocupado por linhas marcadas para exclusão.
  • Para atualizar estatísticas de dados a serem usadas pelo planejador de consultas.
  • Para atualizar o mapa de visibilidade, que acelera as verificações somente de índice.
  • Para proteger contra perda de dados antigos devido à solução alternativa de ID da transação.

O PostgreSQL usa um processo chamado aspiração para excluir permanentemente linhas e recuperar o espaço. Além de recuperar espaço, ele também garante que os índices sejam eficazes.

Quando o processo de aspiração é disparado automaticamente, o processo é conhecido como aspiração automática. A frequência com que o processo precisa ser executado depende da quantidade de operações de atualização e exclusão. Você também pode monitorar o número de linhas marcadas para exclusão.

Executar o processo de aspiração periodicamente garante que você não:

  • Experiência de "sobrecarga", incluindo bancos de dados e tabelas maiores do que o necessário.
  • Tenha índices grandes e aquém do ideal.
  • Enfrente aumento de E/S.

Para monitorar o número de linhas "mortas" em uma tabela, você pode executar uma consulta SELECT:

SELECT relname, n_dead_tup, n_live_tup
FROM pg_catalog.pg_stat_all_tables
ORDER BY n_dead_tup DESC;

Para executar o processo de aspiração manualmente, digite:

vacuum