PostgreSQL
La base de données la plus sophistiquée au monde.

Ouverture de session

Navigation

Contactez-nous

Administration du site :
"equipe chez postgresqlfr point org"

Contact presse :
"fr chez postgresql point org"

Contact association :
"bureau chez postgresqlfr point org"

Questions PostgreSQL :
 IRC :
  serveur irc.freenode.net
  canal #postgresqlfr

Recherche

Accéder aux archives

« Octobre 2008  
Lun Mar Mer Jeu Ven Sam Dim
  2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31  

Syndication

Flux XML

Sondage

Quelle est la version de PostgreSQL la plus répandue sur vos serveurs ?
8.3
10%
8.2
42%
8.1
40%
8.0
2%
7.4
6%
7.3 ou antérieure
0%
Nombre de votes: 48

Probleme performance, aidez moi

| Probleme performance, aidez moi

Par florent95160 le 15/05/2006 - 12:07

Bonjour,

voila, je dois créer une base de données qui doit être TRES performante en temps d'éxécution de procédures stockées.
Je les ai donc optimisées au maximum et leurs performances sont, en générales, bonnes.
Le problème vient de ce "en général". Il m'arrive d'avoir des pics de performances qui font que ma procédure stockée ne prend plus 600ms mais 6secondes. Puis le temps redescend a 600 ms.
La présence de ces pics est assez cycliques (toutes les 5 minutes en général).
Je ne peux pas me permettre cet écart de temps....
J'utilise postgres sous windows XP.
AIDEZ MOI PLIZZZZZZZZ

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramètres" pour activer vos changements.

Tout d'abord tu dois récolte

sparky/ = 15 Mai, 2006 - 15:03

Tout d'abord tu dois récolter des stats, pour savoir ce qui coince (http://docs.postgresqlfr.org/8.1/monitoring-stats.html)

Ensuite quand cela est fait (après redémarrage), tu dois juste type la requête

select * from pg_stat_activity;

pour savoir quel est la requête qui prend tant de temps et là on pourra commencer à travailler sur cette requête.

PS: sous windows il vaut mieux mettre fsync à false, cest plus rapide. Mais c'est un peu risqué : en cas de crash, tes données pourraient être corrompues. As-tu ajusté tes paramètres pour la mémoire (work_mem, shared_buffer) ?


Actuellement, je ne fais l'ap

florent95160/ = 15 Mai, 2006 - 15:57

Actuellement, je ne fais l'appel qu'à une seule des mes procédures stockées en boucle (j'ai crée un .bat qui toutes les 5 secondes appel cette procédures stockée). Elle réalise pas mal d'opérations grâce à l'appel d'autres procédures stockées:
- insertion de 500 entrées dans 2 tables différentes
- mise à jour de 500 valeurs d'une troisième table
- sélection de 500 valeurs sur 2 tables).
Je n'ai pas modifié la valeur de work_mem(elle est égale à 1024), celle de shared_buffer est de 10 000 (modifiée). Je ne sais pas trop comment modifier ces paramètres.
Je suis en train de tester l'impact de fsync actuellement.


On dirait qu'il s'agit d'un

Jean-Paul Argudo/ = 15 Mai, 2006 - 15:09

On dirait qu'il s'agit d'un checkpoint...

Soit, votre problème vient très probablement d'une saturation des I/O sur votre système.

Allez faire un tour sur cette partie de le documentation.

Pour valider le fait que vous avez des soucis avec les checkpoints, augmentez le paramètre checkpoint_segments (mettons 20 pour commencer?), et le paramètre checkpoint_timeout (à 1800 par exemple).

Si vous constatez qu'il s'agit effectivement d'un problème de checkpoint, nous pourrons alors vous conseiller plus en avant. Cependant ce ne sera pas tâche aisée sous Windows. Les plates-formes Unix offrent en effet bien plus de souplesses pour venir à bout de ce genre de problèmes.

Cordialement,

--
Jean-Paul ARGUDO
www.dalibo.com


La modification du paramètre

florent95160/ = 15 Mai, 2006 - 20:08

La modification du paramètre fsync n'a rien changé.
par contre, chekpoint_timeout et checkpoint_segment m'ont permis de diminuer l'intensité de ces pics. Merci pour l'indication. Le problème est qu'ils sont maintenant beaucoup plus nombreux.
Est-ce qu'il existe une manière de bien choisir les valeurs??
De même, comment choisir la valeur de work_mem & shared_buffer??
Je ne comprends pas le pourquoi de l'existence de ces pics. J'applique pourtant tout le temps la même procédure stockée par intervalle de 5 secondes et la variation est énorme.
Pour exemple, une procédure prenant 7secondes en moyenne, lors d'un pic, s'éxécute en plus de 50 secondes.
Je craque, aidez moi s'il vous plait...


C'est facile : les données n

sparky/ = 16 Mai, 2006 - 10:48

C'est facile : les données ne sont pas directement écrites sur disque mais passe par un "buffer" mémoire puis fichier (WAL), quand un checkpoint se produit, ce fichier est écrite (WAL) et tu dois attendre la fin du checkpoint.

voir ici pour plus d'info http://docs.postgresqlfr.org/8.1/wal-configuration.html


Je ne peux donc pas éviter c

florent95160/ = 16 Mai, 2006 - 11:13

Je ne peux donc pas éviter ces pics?? qui, si je comprends bien, sont la conséquence du REDO.
Ce qui m'étonne c'est qu'il soit cyclique (toutes les 3 ou 5 minutes)


ah lala, tu n'as pas lu la do

sparky/ = 16 Mai, 2006 - 11:48

ah lala, tu n'as pas lu la doc. Evidemement que c'est cyclique

Le processus d'écriture en tâche de fond lancera automatiquement un point de contrôle de temps en temps. Un point de contrôle est créé tous les checkpoint_segments segments de journaux ou dès que checkpoint_timeout secondes se sont écoulées. Les paramètres par défaut sont respectivement 3 segments et 300 secondes.

Si tu veux améliorer tu peux aussi mettre xlog sur un autre disque


je comprends donc pour les 3

florent95160/ = 16 Mai, 2006 - 13:47

je comprends donc pour les 3 minutes, ma valeur actuelle pour checkpoint_timeout est de 1800 secondes.... Ca colle bien :p
Je vais jouer sur ces paramètres voir si je peux diminuer l'intensité de ces pics
Merci pour l'aide


© PostgreSQLFr, tous droits réservés.
Site déclaré à la CNIL sous le numéro 1074678, conformément à la Loi en vigueur.