IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

Temps de réponse encore et toujours


Sujet :

PostgreSQL

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut Temps de réponse encore et toujours
    Bonjour,

    Afin de continuer dans ma logique de tests et de rechercher les optimisations possibles dans mes traitements, j'ai installé un nouvel environnement.
    seule différence mon nouveau serveur est maintenant en 64bits.
    Bref j'ai fait un dump de la base qui me pose soucis et je l'ai réimporté sur le nouveau serveur. Suite à l'import un VACCUM et un reindex ont été réalisé.
    Maintenant je prends une requête pas la plus compliqué, mais déjà assez rude pour mettre près de 1minutes 10 à s'exécuter sur mon serveur initial.
    Sur mon nouveau serveur, la même requête ne va probablement pas aboutir puisqu'elle tourne déjà depuis 17minutes...

    Question :
    Je veux bien croire que ma requête est complexe. mais de quoi cela peut-il venir ?
    D'avance merci.

    HadanMarv

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 997
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 997
    Billets dans le blog
    6
    Par défaut
    Quel est le hardware de chacun des serveurs en terme de :
    1) RAM
    2) CPU (type, nombre, vitesse, core)
    3) disques (volume, config raid, vitesse de rotation, agrégats...)

    Ensuite quelle est la configuration de PG, notamment au niveau des shared_buffers ?
    et de bien d'autres paramètres aussi...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Citation Envoyé par HadanMarv Voir le message
    Bref j'ai fait un dump de la base qui me pose soucis et je l'ai réimporté sur le nouveau serveur. Suite à l'import un VACCUM et un reindex ont été réalisé.
    Immédiatement après un import, vacuum et reindex ne servent à rien.
    En revanche ANALYZE est nécessaire pour avoir des statistiques à jour.

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut
    Tout d'abord je ne sais pas si cela à de l'importance ou non mais les deux serveur font tournées une version 8.4.

    Le serveur initial est un serveur virtuel avec :
    Intel(R) Xeon(R) CPU E5320 @ 1.86GHz (simple cœur)
    3Go de RAM et 100Go de disque dur

    Le nouveau serveur est un serveur physique avec :
    Intel(R) Xeon(R) CPU 5160 @ 3.00GHz (double cœurs)
    4Go de RAM et 130Go de disque dur.

    Seule différence dans les fichiers postgresql.conf
    sur le sereur initial
    sur le nouveau serveur
    Je l'ai fait réajuster par l'administrateur mais aucune différence.

    D'avance merci de vos lumières,

    HadanMarv

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 997
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 997
    Billets dans le blog
    6
    Par défaut
    Ce qui est certains c'est que dans un cas comme dans l'autre ces paramètres sont incorrects. Montez au moins à 1 Go de Sharred_buffers.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut
    je viens de porter le shared_buffers à 1Go sur mon poste (8Go de RAM).
    la requête n'aboutissait déjà pas sur mon pc, et c'est toujours le cas.
    D'autres pistes ?

    HadanMarv

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 997
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 997
    Billets dans le blog
    6
    Par défaut
    Sans nous donner d'autres info, difficile...
    Quelles version de PG ?
    Quelle requêtes ?
    Quelle volumétrie des données ?
    etc...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut
    Version de postgres déjà mentionné : 8.4
    la requête est un peu complexe avec quelques jointures.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    SELECT distinct
        DEM_IDSTA as IDSTA,
        sti_id as IDSTI,
        sum(HRE_SESSION.nb_heures) as NBH_SES_INS_TOTAL
    FROM DEMANDES
    JOIN STAGES ON DEM_IDSTA=STA_ID AND DEM_ISUPP=0
    JOIN AFFAIRES_PRODUITS on DEM_IDAPR = APR_ID
    JOIN AFFAIRES on APR_IDAFF=AFF_ID
    JOIN STAGES_INSCRIPTIONS on STI_IDSTA=DEM_IDSTA and STI_ISUPP=0 and STI_DATE_DES is null and sti_id > 0
    JOIN (
    	select
    		STI_IDSTA,
    		sti_id as stiid,
    		coalesce (SES_PARTIEL.IDSTS,STS_ID) as IDSTS,
    		NB_SES_INSCRIT,
    		NB_SES_TOTAL
    	from
    		stages_inscriptions 
    		left join (
    			select distinct
    				STI_IDSTA as IDSTA,
    				sti_id as IDSTI, 
    				coalesce (NB_SES_INS, SES_PLAN.NB_SES) as NB_SES_INSCRIT,
    				SES_PLAN.NB_SES as NB_SES_TOTAL
    			from
    				stages_inscriptions 
    				left join stages_sessions on STI_IDSTA = STS_IDSTA and STS_ISUPP=0
    				left join stages_inscriptions_sessions on STS_ID = SIS_IDSTS and SIS_IDSTI=STI_ID AND SIS_ISUPP=0
    				left join (
    					select sts_idsta as IDSTA, count(sts_id) as NB_SES
    					from stages_sessions 
    					where sts_isupp = 0
    					group by sts_idsta
    				) as SES_PLAN on SES_PLAN.IDSTA=STI_IDSTA
    				left join (
    					select sti_idsta as IDSTA, STI_ID as IDSTI, count(sis_id) as NB_SES_INS
    					from stages_inscriptions
    					join stages_inscriptions_sessions on STI_ID=SIS_IDSTI
    					where sis_isupp = 0 and STI_MOTIF_DES_CVT71 IS NULL and STI_DATE_DES is null and sti_id > 0
    					group by sti_idsta, STI_ID
    				) as SES_INS on SES_INS.IDSTA=STI_IDSTA and  SES_INS.IDSTI=sti_id
    			where
    				STI_DATE_DES is null
    				and sti_id > 0
    				and sti_isupp=0
    		) as INSC on INSC.IDSTA=STI_IDSTA AND sti_id=INSC.IDSTI
    		left join stages_sessions on STI_IDSTA = STS_IDSTA and STS_ISUPP=0 and NB_SES_INSCRIT = NB_SES_TOTAL
    		left join (
    			select
    				STI_IDSTA as IDSTA,
    				sti_id as IDSTI,
    				SIS_IDSTS as IDSTS
    			from
    				stages_inscriptions 
    				join stages_sessions on STI_IDSTA = STS_IDSTA and STS_ISUPP=0 
    				join stages_inscriptions_sessions on STS_ID = SIS_IDSTS and SIS_IDSTI=STI_ID AND SIS_ISUPP=0
    		) as SES_PARTIEL on SES_PARTIEL.IDSTA= STI_IDSTA and SES_PARTIEL.IDSTI=sti_id
    	where
    		STI_DATE_DES is null
    		and sti_id > 0
    		and sti_isupp=0
    ) as INSCRIT on INSCRIT.STI_IDSTA=DEM_IDSTA and INSCRIT.STIID=STI_ID
    left join (
    	select
    		sta_id,
    		sts_id,
    		sum(stq_jours) as nb_jours,
    		sum(stq_heures) as nb_heures
    	from
    		stages
    		join stages_sessions on sta_id=sts_idsta and sts_isupp=0
    		join stages_sequences on sts_id=stq_idsts and stq_isupp=0 and stq_type_cvt26 in ('001','003')
       where
    	   STA_ISUPP=0
    	group by
    		sta_id, sts_id
    ) as HRE_SESSION on
    	HRE_SESSION.sta_id=dem_idsta and HRE_SESSION.sts_id=INSCRIT.IDSTS
    WHERE
        STA_ISUPP=0 AND STA_ETAT_STAGE_CVT42='2' and dem_etat_cvt33 IN ('DEM','ENP','PRO','VAL')
    GROUP BY
        AFF_ID,
        APR_ID,
        DEM_ID,
        DEM_IDSTA,
        sti_statut_cvt58,
        sti_statut_detail_cvt88,
        sti_id,
        DEM_IDSTP
    Volumétrie :
    Demandes : 57836
    Stages : : 50838
    Affaires_produits : 21836
    Affaires : 3031
    Stages_inscriptions : 218699
    Stages_sessions : 78551
    Stages_inscriptions_sessions : 60500
    Stages_sequences : 115050

    J'ai passé le shared_buffer à 1Go sans aucune amélioration notable.
    D'autres idées ?

    HadanMarv

  9. #9
    Membre émérite Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Par défaut
    Bonjour,

    (Désolée pour la rafale de questions)
    - Avez-vous effectué le ANALYZE proposé par estofilo ?
    - Vos disques durs sont-ils montés en RAID ? Si oui, le quel ? Est-ce le même sur les deux serveurs ?
    - Quelle est la vitesse de rotation des disques sur les deux serveurs ?

    Cordialement,

    Arkhena

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut
    Analyze fait, reindex en cours.
    pas de RAID, Vitesse de rotation euh alors là j'en sais rien désolé.

    HadanMarv

  11. #11
    Membre expérimenté
    Avatar de sweetasnz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 212
    Par défaut
    Pour optimiser le temps de réponse
    il faudrait d'abord savoir le nombre de connexions simultanées dont tu as besoin au risque de planter le serveur si tu boostes trop certaines variables du postgresql.conf.
    Est-ce un serveur dédié Postgres?

  12. #12
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut
    c'est un serveur dédié contrairement à l'initial qui embarquait en plus Tomcat.
    c'est vraiment étrange.

  13. #13
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    puisque vous avez fait l'analyze, avez-vous comparé les plans d'executions de la requête pour voir s'ils sont identiques ?

  14. #14
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut
    J'aimerai bien, mais même le plan d'exécution il ne me le sors pas...
    Alors que sur mon serveur virtuel (là où se trouve la base initial) je n'ai aucun soucis. la requête abouti (1min 30 environ) et j'ai aussi le plan d'exécution.

  15. #15
    Membre expérimenté
    Avatar de sweetasnz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 212
    Par défaut
    impressionnant quand même...c'est possible de faire autant de jointure et avoir le plan d'execution?

    sinon, n'y a t'il pas ton paramètre de conf : join_collapse_limit qui diffère entre les 2 serveurs ?

  16. #16
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Quand une requête n'en finit jamais et qu'on veut son plan d'exécution, ce qui semble être le cas ici, on fait EXPLAIN de la requête, ce qui ne l'exécute pas, par opposition à EXPLAIN ANALYZE qui sort des résultats plus précis mais après exécution seulement.

    Si l'ancien serveur tourne toujours il serait en effet intéressant de comparer l'ancien et nouvel EXPLAIN.

    Par ailleurs une comparaison de SHOW ALL sur les 2 serveurs serait aussi utile s'il s'agit de trouver une différence de paramétrage qui pourrait expliquer le problème.

  17. #17
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut
    Alors pour commencer merci de vous intéresser à mon problème.
    Je viens de faire les show all sur les deux environnements.
    ce qui en ressort (trois différences ) :

    Sur le serveur initial :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    server_version;8.4.8;Shows the server version.
    server_version_num;80408;Shows the server version as an integer.
    shared_buffers;32MB;Sets the number of shared memory buffers used by the server.
    Sur le nouveau serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    server_version;8.4.11;Shows the server version.
    server_version_num;80411;Shows the server version as an integer.
    shared_buffers;1GB;Sets the number of shared memory buffers used by the server.
    La différence de shared_buffers est dû à une modification suggéré par SQLpro un peu plus tôt.

    En ce qui concerne les explain (merci pour l'astuce je faisais toujours explain analyze comme un ....).
    Et bien ils sont différents.
    Par contre je suis incapable de l'expliquer.
    Vous trouverez en pièce jointe les fichiers explain.
    Merci de votre aide.

    HadanMarv

    PS : ce qui m'inquiète aussi c'est que cette requête n'est pas, et de loin, la plus compliqué.
    Fichiers attachés Fichiers attachés

  18. #18
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Vous n'avez pas la même version de postgresql.

    Avec une 8.4.8 sur votre nouvelle plateforme, la requête marche correctement ?

    (changer à la fois de version et de matériel c'est pas ce que je ferai en passant, vu que quand il y a un problème ce sont 2 axes de recherche ...)

  19. #19
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut
    la différence de version doit s'expliquer par le fait que le serveur initial est en 32bits et que le nouveau est en 64bits.
    Pas sûre de pouvoir installer exactement la même version de fait.
    En plus je ne suis pas certain que cela influence le plan d'exécution sur des versions mineurs, non ?

    HadanMarv

  20. #20
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Beh si, regardez les releases note entre la v8.4.8 et la v8.4.11 et vous verrez plusieurs changements qui peuvent impacter les plans.


    Personnellement, j'essairai de comprendre quelle partie de la requête pose problème (en la reconstruisant petit à petit), puis essayer de ré-écrire pour contourner le problème.


    M'enfin vu sa complexité je me demanderai aussi : est-ce que je ne fais pas des choses en trop dans cette requête ? Est-elle bien écrite ? etc

Discussions similaires

  1. temps de réponse localhost\réseau: troublant...
    Par Nickytchao dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 17/01/2005, 08h24
  2. Réponses: 5
    Dernier message: 17/11/2004, 21h29
  3. Ressources, temps de réponse, requète ...
    Par _____M_____ dans le forum Administration
    Réponses: 16
    Dernier message: 31/03/2004, 16h12
  4. Temps de réponse : objet TTable (BDE)
    Par lirva dans le forum Bases de données
    Réponses: 5
    Dernier message: 12/12/2003, 00h50
  5. Temps de réponse entre deux sites
    Par coup dur dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 16/10/2003, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo