PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Evite que o PostgreSQL às vezes escolha um plano de consulta ruim


Se o planejador de consultas tomar decisões erradas, é principalmente uma das duas coisas:

1. As estatísticas são imprecisos.


Você executa ANALYZE suficiente? Também popular em sua forma combinada VACUUM ANALYZE . Se o autovacuum estiver ativado (que é o padrão no Postgres moderno), ANALYZE é executado automaticamente. Mas considere:
  • O VACUUM ANALYZE regular ainda é recomendado na versão 9.1?



Se sua mesa for grande e a distribuição de dados é irregular , elevando o default_statistics_target pode ajudar. Ou melhor, apenas defina o destino das estatísticas para as colunas relevantes (aquelas em WHERE ou JOIN cláusulas de suas consultas, basicamente):
ALTER TABLE ... ALTER COLUMN ... SET STATISTICS 400;  -- calibrate number

O alvo pode ser definido no intervalo de 0 a 10.000;

Execute ANALYZE novamente depois disso (em tabelas relevantes).

2. As configurações de custo porque as estimativas do planejador estão desativadas.


Leia o capítulo Constantes de Custo do Planejador no manual.

Veja os capítulos default_statistics_target e random_page_cost nesta página geralmente útil do PostgreSQL Wiki.

Existem muitas outras razões possíveis, mas estas são de longe as mais comuns.