Atualmente usando Postgres 14.
A execução CLUSTER sometable USING someindex;
é ótima, mas existe uma consulta para determinar o quão "desclusterizada" a tabela se tornou após muitas atualizações e exclusões?
Pesquisando e lendo https://www.postgresql.org/docs/14/sql-cluster.html apenas diz "configure um script de manutenção periódica ... para que as tabelas desejadas sejam periodicamente reclusteradas", o que é inútil, pois não não dá nenhuma indicação de como determinar quão periódica deve ser a reagrupamento periódico.
Você pode usar
correlation
as estatísticas da coluna coletadas porANALYZE
(ou em segundo plano porautovacuum
) como indicador:O manual:
O valor de correlação da coluna usada como campo de índice inicial pode ser seu guia. Quanto mais próximo de 0 estiver, mais você precisará executar novamente
CLUSTER
. Depende muito do seu caso de uso o quão perto você precisa chegar da ordem de classificação perfeita.Aumente a meta estatística da coluna e/ou execute
ANALYZE
primeiro para aumentar a precisão. Ver:Para índices com múltiplas colunas, a primeira coluna deve ser boa o suficiente como indicador. Ou você pode usar estatísticas multivariadas para melhorar a validade em casos especiais.
Você pode considerar uma das ferramentas da comunidade (superiores) para substituir o
CLUSTER
. Ver: