Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Nouvel utilisateur de PostgreSQL (depuis 3 semaines maintenant), je suis ravi de découvrir ce moteur.
Je rencontre malgré tout une petite difficulté avec un batch qui lance une requête qui tourne en moins d'une seconde habituellement et qui de temps en temps met plus de 9h à s'executer, avec un core à 100%.
J'ai beau regarder, je ne vois pas ce qui bloque, sachant que le serveur est actuellement utilisé 1 fois par heure pour un traitement de 5 minutes, avant que soit lancée ma requête. Lorsque ma requête met 9h, mon traitement continue de s'exécuter une fois toute les heures, sans mettre plus de temps.
Avec PGAdmin, j'ai lancé la fenêtre "Etat du serveur" qui me renseigne sur les process en cours, et l'état des verrous.
Ma requête est actuellement lancée depuis 1h30, et si je regarde il n'y a qu'elle en cours d'activité (les autres process sont à <IDLE>). Au niveau des verrous, il n'y a qu'elle qui en pose, tous en "AccessShareLock", sauf un en "ExclusiveLock" (Le XID est le même que le TX pour ce dernier).
Soyons honnête, je n'y comprends pas grand chose et je ne sais par ou commencer. Si quelqu'un ici avait la gentillesse de m'indiquer une voie, je me ferais un plaisir de la suivre. C'est mon dernier blocage avant de lancer mon application en production...
Merci d'avance pour tout,
Cordialement,
Alexis.
Hors ligne
- De quelle version du moteur s'agit il ?
- Ça ressemble à un changement de plan. On verra la requête dans un second temps, mais si vous avez la chance d'avoir une 8.4, nous devrions pouvoir trouver ce qui ne va pas rapidement.
Marc.
Hors ligne
Bonjour,
Tout d'abord merci pour votre réponse particulièrement rapide.
SELECT VERSION(); me renvoi :
"PostgreSQL 8.4.1 on x86_64-pc-linux-gnu, compiled by GCC gcc-4.3.real (Debian 4.3.2-1.1) 4.3.2, 64-bit"
Nous avons donc la chance d'être en 8.4
Je dois vous avouer que je suis tout ouïe
(Le changement de plan pourrait se concevoir, le traitement qui tourne toutes les heures remplissant la table...)
Cordialement,
Alexis.
Hors ligne
Je vous conseille donc d'installer le module contrib auto_explain :
http://docs.postgresql.fr/8.4/auto-explain.html
(étant donné que c'est du contrib, c'est un peu plus pénible à installer, mais ça devrait vraiment aider).
Le principe de ce module est de vous fournir le plan de toute requête dépassant n secondes dans la log. Vous le paramétrez à 60s de durée minimale par exemple, et vous saurez ce qui change dans le plan par rapport au plan normal. Il nous faudra découvrir la cause à ce moment là, mais cela devrait être jouable (il faudra trouver où l'estimation était fausse dans le plan).
Marc.
Hors ligne
Pages : 1