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

Hibernate Java Discussion :

Requete très lente


Sujet :

Hibernate Java

  1. #1
    Membre éprouvé Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Points : 1 154
    Points
    1 154
    Par défaut Requete très lente
    Bonjour, j'ai récemment fait mes premiers pas en hibernate, et je constate que j'ai une énorme baisse de performance sur une requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List inter = session.createQuery("FROM Intervenant ORDER BY prenom, nom").list();
    Il me faut 15 secondes pour avoir le résultat!
    Pour info la table Intervenant doit faire dans les 15 enregistrements, ce qui me semble quand meme très petit
    Pour info un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from intervenant order by prenom, nom
    tout bete est quasiment instantané.

    En revanche plusieurs tables de quelques milliers d'enregistrements ont une foreign key vers la table intervenant.

    Cette lenteur n'est pas systématique (au bout de quelques exécutions elle devient instantanée), mais c'est quand même très pénalisant...

    Est-ce normal d'avoir une telle baisse de performance???

  2. #2
    Membre régulier
    Inscrit en
    Janvier 2008
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 168
    Points : 103
    Points
    103
    Par défaut
    Salut
    As-tu des collections dans ta classe "Intervenant" ?

  3. #3
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Est ce que tu charges ta base en mémoire au démarrage de ton appli, car si tu le fais pas, la lenteur peut venir de là.

    La lenteur se fait ressentir à chaque première requête, où avant de renvoyer le résultat, tu auras le chargement qui se fera avant. Tu peux voir ça en passant à true le hibernate.show_sql. Dès que tu accéderas à une page ou fera une action qui déclenche une requête, tu verras toute la mise en mémoire se faire.

  4. #4
    Membre éprouvé Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Points : 1 154
    Points
    1 154
    Par défaut
    Alors effectivement il y a 6 "Set" dans ma classe Intervenant, représentant les 6 clés étrangères des autres tables.
    En mettant le show_sql à true je m'aperçois qu'il va faire des centaines de requetes avec plein de "left outer join" rien que pour récupérer mes intervenants

    Y a-t-il moyen de lui dire de ne pas loader tous les Set avant que je ne fasse directement appel à eux?

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Ces "set" sont ils déclarés en lazy = false ?

  6. #6
    Membre éprouvé
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Points : 935
    Points
    935
    Par défaut
    Bonjour,

    il faut regarder du coté de lazy

  7. #7
    Membre éprouvé Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Points : 1 154
    Points
    1 154
    Par défaut
    Effectivement si je les met à "lazy=true" c'est beaucoup plus rapide!
    Damned je me sens sacrément boulet...

    Merci pour l'aide!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL-5.1] Requete très lente avec Order By et Limit
    Par dimainfo dans le forum Requêtes
    Réponses: 10
    Dernier message: 18/07/2013, 14h48
  2. Requete très lente à éxécuter
    Par thom33 dans le forum Requêtes
    Réponses: 12
    Dernier message: 18/02/2013, 20h07
  3. [MySQL] Requete Mysql très lente
    Par Ancool dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 18/03/2011, 10h40
  4. Requete très lente avec invite
    Par nabou dans le forum SSRS
    Réponses: 4
    Dernier message: 15/02/2011, 09h22
  5. Réponses: 22
    Dernier message: 28/11/2010, 12h25

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