Eu tenho 10-15 mesa grande, 5GB a 30GB. E o resto deles menos de 1GB. Alguns dados de tabelas são enormes e onde diariamente são geradas 500.000 tuplas mortas. E o autovacuum começa quase 7 dias depois, quando as tuplas mortas são mais de 3,5 milhões. Este banco de dados possui cerca de 60 tabelas. Aqui o limite para o banco de dados é: 20%.
Quero alterar o limite de autovacuum de 20% para 1%. Existe algum impacto no desempenho do sistema (já que para tabelas menores ele será executado com frequência). Qual deve ser o valor do parâmetro maintanance_work_mem & work_mem para isso?
Você pode alterar o fator de escala do autovacuum para uma tabela individual:
VACUUM
não é barato, portanto, executá-lo com mais frequência exigirá mais recursos. No entanto, comoVACUUM
normalmente tem menos trabalho a fazer quando chamado com mais frequência, não é tão ruim quanto parece. A principal sobrecarga é que cadaVACUUM
execução varrerá todos os índices na tabela, e esse trabalho não será menor se você executar comVACUUM
mais frequência (embora o PostgreSQL v14 tenha introduzido uma otimização que ignora varreduras de índice se apenas poucas entradas de índice tiverem que ser excluídas) .Normalmente, não há problema em ter o padrão de 20% de inchaço, mesmo para mesas grandes. Considere aumentar a frequência apenas se você estiver visando varreduras eficientes somente de índice nessa tabela.
A principal coisa que você deve observar é que o autovacuum é rápido o suficiente em suas mesas grandes. Para isso, ajuste
maintenance_work_mem
para ser alto (para que os índices não precisem ser verificados com mais frequência do que o necessário) e talvez reduzaautovacuum_vacuum_cost_delay
nessas tabelas.