PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Empêcher PostgreSQL de choisir parfois un mauvais plan de requête

Si le planificateur de requêtes prend de mauvaises décisions, c'est principalement l'une des deux choses suivantes :

1. Les statistiques sont inexacts.

Exécutez-vous ANALYZE suffisant? Également populaire sous sa forme combinée VACUUM ANALYZE . Si autovacuum est activé (ce qui est la valeur par défaut dans Postgres moderne), ANALYZE est exécuté automatiquement. Mais considérez :

  • Est-ce que l'ANALYSE DU VIDE régulière est toujours recommandée sous 9.1 ?

Si votre table est grande et la distribution des données est irrégulière , augmentant le default_statistics_target peut aider. Ou plutôt, définissez simplement la cible des statistiques pour les colonnes pertinentes (celles dans WHERE ou JOIN clauses de vos requêtes, en gros) :

ALTER TABLE ... ALTER COLUMN ... SET STATISTICS 400;  -- calibrate number

La cible peut être définie dans la plage de 0 à 10 000 ;

Exécutez ANALYZE à nouveau après cela (sur les tables pertinentes).

2. Les paramètres de coût pour les estimations du planificateur sont désactivées.

Lisez le chapitre Constantes de coût du planificateur dans le manuel.

Regardez les chapitres default_statistics_target et random_page_cost sur cette page Wiki PostgreSQL généralement utile.

Il existe de nombreuses autres raisons possibles, mais ce sont de loin les plus courantes.