|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre éclairé
![]() Inscription : avril 2009 Messages : 523 ![]() |
bonjour/bonsoir,
Je recherche une optimisation miracle avant un changement de matériel plus puissant. Je voudrais savoir quel paramètre modifier dans la config de postgresql (8.1) pour qu'il consomme plus de mémoire et fasse moins d'accès disque. En fait j'ai une grosse requête de cette forme : Code :
Le traitement prend 16s, le cpu tourne à 100% et seulement 5% de la mémoire est utilisée). J'ai relevé ces valeurs via la commande TOP sous linux. donc voilà j'aimerais changer quelques truc dans la config (de base) pour booster cela. Si quelqu'un a une solution miracle (autre que la réécriture du code sql car je n'ai pas la main dessus (c'est un erp)). merci de votre aide. infos hardware : pg tourne dans une VM debian etch4, installée sur une machine avec cpu core i7 2.8Ghz, 2Go de RAM accordée à la vm et 2 cores). La VM (fichier 10Go) est sur un ssd bas de gamme.. Pg est installé par défaut, seul le max_stack_deph a été changé et porté à 8096 sinon la requête ne fonctionne pas. |
||
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
Par rappport à la config de base qui est prévue pour un tout petit serveur, je dirais d'essayer de changer:
shared_buffers: mettre 512M work_mem: 10M effective_cache_size: 1G Un EXPLAIN ANALYZE sur la requête serait utile aussi pour voir comment il gère le filtrage sur la colonne id. |
|
|
10
|
|
|
#3 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
Bonjour,
2 choses que je ne comprend pas : - D'où viennent toutes ces id ? d'une autre requête ? - A la fin de la requête il y a un joli order by X limit 101 => ne pouvez-vous pas limiter la clause IN ? |
|
|
00
|
|
|
#4 | |||
|
Membre éclairé
![]() Inscription : avril 2009 Messages : 523 ![]() |
Citation:
2 - 101 est le bombre par défaut défaut de toute recherche faite via l'interface graphique bonjour, je reviens ici car depuis, la base a augmenté et les temps de réponses aussi hélas... j'ai fait quelques tests et prises d'informations. situation 0 : sur le vieux système non virtualisé (2x xeon 5130 (2.0GHz) 2 Go RAM HD scsi), la grosse requête prend maintenant 32s. situation 1 : sur une workstation i7-975 (3.3GHz) 2Go RAM HD sata (virtualisé), la grosse requête prend 15s situation 2 : sur un portable très récent i7 2640M (2.8Ghz) + 2Go rAM + SSD (toujours virtualisé) prend 14s Sachat qu'il n'y a pas de matériel deux fois plus rapide que celui en situation 1, je commence à me faire des soucis ! En situation 0, la config de pg a été amélioré mais sans miracle. En situation 1 et 2 : c'est la confif de base (d'installation) Dans les trois situations, le cpu tourne à 95-100% et seulement 5-10% de ram utilisée seulement ! La base de fait que 150Mo. LA table ne compte que 30000 enregistrement et la requête en sort que 127. où est le problème ? où est le fameux paramètre à changer ? quel est le goulot d'étranglement ? merci de votre aide. ps: j'ai refait un explain analyse sur la situation 1 : Code :
|
|||
|
|
00
|
|
|
#5 |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
En situation 1 tu dis que ça prend 15s mais l'explain analyze montre 61 millisecondes.
Pourquoi ces temps d'exécution n'ont rien à voir entre eux? |
|
|
00
|
|
|
#6 | |
|
Membre éclairé
![]() Inscription : avril 2009 Messages : 523 ![]() |
Citation:
car j'ai remarqué que c'était encore plus long avec l'explain. une minute me semble la bonne valeur. peut-être que pgadmin3 ne renvoie pas la bonne valeur du coup. quoi qu'il en soit au chrono c'est bien 15 à 16s ! |
|
|
|
00
|
|
|
#7 |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
C'est bizarre. Le point n'est pas censé être séparateur de milliers, même au format américain soit c'est la virgule, soit pas de séparateur du tout ce qui me semble-t-il est le cas pour les temps d'exécution.
Si tu mets quelque part le contenu zippé de ta table sale_order_line avec les 30k lignes je veux bien essayer ta requête sur les vraies données pour corroborer ou pas tes résultats. |
|
|
00
|
|
|
#8 |
![]() ![]() Yoann MoreauIngénieur en laboratoire de recherche Inscription : septembre 2005 Messages : 724 ![]() |
Testé à l'intant sur deux serveurs. Sur un postgresql en français la décimale est avec une virgule, sur un postgresql en anglais (je ne sais pas s'il y a une différence anglais/américain) la décimale est avec un point. Les milliers ne sont pas séparés.
Il pourrait être intéressant de lancer la requête dans psql au lieu pgadmin pour voir. |
|
00
|
Copyright © 2000-2012 - www.developpez.com