Explicar a finalidade da aspiração e da aspiração automática
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