Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Administration
Administration Forum d'entraide sur l'administration de PostgreSQL : utilisateurs, privilèges, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/04/2011, 13h39   #1
Invité de passage
 
Inscription : juin 2005
Messages : 21
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 21
Points : 4
Points : 4
Par défaut Problème de Performances entre bases avec une même requête

Bonjour,

J'ai un gros problème de performances qui m'interpelle.

Je dispose d'un serveur postgres sur lequel sont déployés n bases toutes construites à partir d'un même script, ayant donc la même structure, tables, index ...

Je réalise exactement la même requête sur chaque base et j'obtiens des temps de réponse allant de 0,5 s à 45 s!

La base la plus chargée donne le meilleur temps!

Une instruction VACUUM FULL ANALYZE sur les bases n'y change rien.

Si vous avez une idée de ce qui peut expliquer la chose, moi ça me laisse perplexe.
Merci
olivier_44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 14h07   #2
Modérateur
 
Inscription : octobre 2008
Messages : 1 505
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 505
Points : 2 034
Points : 2 034
Il faut comparer l'EXPLAIN ANALYZE d'une requête rapide et lente suivant la base.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 16h13   #3
Invité de passage
 
Inscription : juin 2005
Messages : 21
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 21
Points : 4
Points : 4
Bon bah,

Les plans d'exécution ne sont pas nécessairement les mêmes entre chaque base. Le point consommateur est identifié :

Code :
1
2
3
4
 
Nested Loop (cost=491.48..73612.24 rows=106514 width=28) (actual time=26.384..10912.759 rows=17181 loops=1)
 
    * JOIN Filter: ((("inner".objet)::text ~~ '%test%'::text) OR ("inner".contenu ~~ '%test%'::text) OR (("outer".nom)::text ~~ '%test%'::text) OR (("outer".sousnom)::text ~~ '%test%'::text) OR (("inner".sousnom)::text
Dans le meilleur des cas ce n'est pas une Nested Loop mais un Merge join qui réalise ce groupe de conditions alors sur beaucoup moins de lignes. Voilà pour les différences.
Mais je n'ai pas l'explication de pourquoi de telles différences et comment les réduire ...

Ca reste pour moi un bon schmilblic!
olivier_44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 17h15   #4
Modérateur
 
Inscription : octobre 2008
Messages : 1 505
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 505
Points : 2 034
Points : 2 034
Voici différentes choses faisables:
- augmenter la précision des statistiques avec ALTER TABLE SET STATISTICS. Par défaut c'est 100 sur 8.4+ et 10 sur versions antérieures.
- augmenter work_mem pour favoriser le choix d'un merge join. il peut être changé n'importe quand y compris juste pour une requête
- changer les constantes de l'optimiseur comme random_page_cost ou cpu_tuple_cost
- mettre enable_nestloop à false ce qui le forcera à choisir autre chose (méthode recommandée quand rien d'autre ne fonctionne).
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 10h22   #5
Invité de passage
 
Inscription : juin 2005
Messages : 21
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 21
Points : 4
Points : 4
J'ai fait deux manipulations

- augmenter work_mem pour favoriser le choix d'un merge join
- mettre enable_nestloop à false ou off

Résultat : aucun changement et ce qui est surprenant c'est qu'il continue à utiliser des nested loop.

c'en est désespérant ...
olivier_44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h12.


 
 
 
 
Partenaires

Hébergement Web