Não acho que você precise aspirar manualmente, a menos que comece a ver a degradação do desempenho. No entanto, eu recomendo fortemente revisar suas configurações de vácuo e vácuo automático e ajustá-lo às suas necessidades
Para ver suas configurações atuais, execute esta consulta:
SELECT *
FROM pg_settings
WHERE name LIKE '%vacuum%'
A maioria dos campos é auto-explicativa, mas aqui está a documentação:
https://www.postgresql.org/docs/current/static/runtime-config-autovacuum.html
Eu diria que seu objetivo deve ser configurar o vácuo automático para limpar o lixo de forma consistente, mas não execute o vácuo automático constantemente
As configurações mais importantes são:
- autovacuum_vacuum_scale_factor - determina a porcentagem de tuplas que podem estar mortas antes que uma limpeza seja acionada. Valor padrão = 0,2
- autovacuum_vacuum_threshold - número mínimo de tuplas mortas antes que a limpeza seja acionada. Valor padrão = 50
O limiar ajuda a impedir que o processo de limpeza seja acionado com muita frequência para tabelas pequenas.
As configurações padrão funcionam bem, a menos que você tenha tabelas muito grandes. Simplificando, se houver uma tabela com 100 GB, você acumulará 20 GB de lixo antes que o vácuo automático seja acionado. Portanto, eu geralmente recomendo definir o fator de escala baixo. Quão baixo você deve determinar por si mesmo. Eu uso 0,05 no meu projeto atual
Os limites também podem ser aumentados. Muitos aplicativos têm algumas tabelas, que são frequentemente atualizadas e 50 tuplas não são muito. Aumentar para 1000 não deve levar a nenhum problema, mas é claro, você deve considerar seu próprio caso
Você também pode ajustar o vácuo automático e ter configurações diferentes para algumas de suas tabelas
ALTER TABLE your_table SET (autovacuum_vacuum_scale_factor = 0.05);
Se você configurar o fator de escala e os limites, deverá ficar bem. Você também pode aumentar autovacuum_vacuum_cost_limit
, que por padrão é igual avacuum_cost_limit
, definido como 200. Esse é um recurso muito importante do vácuo, que não permite consumir todos os recursos e permite que seu aplicativo opere com dados mesmo durante o processo de aspiração. , mas o valor padrão é muito baixo. Aumentar para 1000 não deve levar a atrasos significativos, mas permitirá que o processo a vácuo termine muito mais rápido
Obviamente, você também pode executar o vácuo manualmente. No caso mais simples, você pode ter uma tarefa cron simples, que fará uma limpeza completa todas as noites, quando seu banco de dados não for acessado com frequência
Espero que ajude!