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 :

connection pool size


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de natoine
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2007
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 393
    Par défaut connection pool size
    J'ai testé mon appli vendredi dernier avec 30 utilisateurs en même temps.
    Je fais de la persistence via hibernate mais dans des portlets (pour ceux qui ne connaissent pas les portlets, c'est très proche des servlets).
    Donc en gros, j'ai eu 30 utilisateurs qui ont utilisé en même temps la même instance de portlet avec chacun une session différente.
    Du coup, j'ai eu à peu prés 30 connections en même temps à ma base de données mysql.
    Et il y a eu un probléme.
    C'était trés lent dés que une requête hibernate était envoyée et au bout d'un moment, à peu prés 30 minutes, la connection à la base de données est devenue impossible.

    Donc je regardais la doc d'hibernate et je me suis dit que ça devait être l'option connection.pool_size dans mon hibernate.cfg.xml qui était mal définie.
    Lors de l'expérimentation, la valeur était définie à 1.
    Je pense donc la passer à plus de 30 pour la suite.

    Est-ce bien ce qu'il faut faire ?
    Est-ce que 100 est une trop grosse valeur (est-ce qu'il y a une valeur limite en gros) ?
    Quelles sont les conséquences de l'augmentation de cette valeur ?
    www.natoine.fr
    natoine.developpez.com
    Principalement du Java avec un soupçon de réseaux sociaux.

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Le mieux est de définir la pool size au niveau du serveur via le pool de connexions de la data source.
    En effet cela permet de s'abstraire de la configuration de l'application.

    Ensuite, le pool size dépend des capacités de ton serveur mysql. Un bon nombre de paramètre entrent en considération, OS, type de CPU, nombre de CPU/Core, mémoire allouée.

    Le mieux est d'y aller par méthode empirique à partir d'une valeur de base dans les 10-20.

    Toutefois, allouer un grand nombre de connections dans le pool (une centaine ou plus) a tendance à donner de mauvais résultats en général, en effet ça a tendance à saturer le SGBD au lieu du serveur java, ce qui revient au même.

    La solution idéale étant d'équilibrer la charge entre les deux.

    Pour le moment contente toi de commencer vers 15/20, si tu vois que ça déroule sans le moindre accroc sur la charge standard attentue, essaie de descendre ce nombre au fur et à mesure pour estimer le nombre minimal de connections à maintenir dans le pool. Si ça rame à 15/20, il faut à ce moment déterminer où se trouve la charge, ie sur le serveur d'appli ou sur le serveur SGBD. Suivant le cas il faudra augmenter ou diminuer le nombre de connexions qui sont dans le pool.

  3. #3
    Rédacteur

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2002
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Août 2002
    Messages : 359
    Par défaut
    Citation Envoyé par sinok Voir le message
    Le mieux est de définir la pool size au niveau du serveur via le pool de connexions de la data source.
    En effet cela permet de s'abstraire de la configuration de l'application.

    Ensuite, le pool size dépend des capacités de ton serveur mysql. Un bon nombre de paramètre entrent en considération, OS, type de CPU, nombre de CPU/Core, mémoire allouée.
    Je confirme, il vaut mieux utiliser le pool de connexion du serveur d'application si tu en a un.

    D'ailleur red hat/Jboss le confirme aussi

    Hibernate's own connection pooling algorithm is, however, quite rudimentary. It is intended to help you get started and is not intended for use in a production system, or even for performance testing. You should use a third party pool for best performance and stability
    .

  4. #4
    Membre éclairé
    Avatar de natoine
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2007
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 393
    Par défaut
    Merci pour vos réponses.
    Je passe à 15 pour l'instant.

    Par contre, pour utiliser le pool de connection du serveur, il faut mettre quoi dans hibernate.cfg.xml du coup ?
    www.natoine.fr
    natoine.developpez.com
    Principalement du Java avec un soupçon de réseaux sociaux.

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

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Rien, c'est ton serveur d'application qu'il faut paramétrer.

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    C'est le serveur qui gère tout ça via la datasource, il te faut juste pointer sur la datasource au niveau du hibernate.cfg.xml

    La doc sur le pooling jdbc de mysql: http://dev.mysql.com/tech-resources/...onnectorj.html

    Ensuite ton pool se configure différemment suivant les serveurs d'appli.

    Sous quoi tournes tu?

  7. #7
    Membre éclairé
    Avatar de natoine
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2007
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 393
    Par défaut
    J'ai déployé mes portlets dans un jboss portal sur une machine linux.
    La distrib je crois que c'est une Red Hat.
    C'est pas moi le responsable du serveur ^^
    www.natoine.fr
    natoine.developpez.com
    Principalement du Java avec un soupçon de réseaux sociaux.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/04/2009, 13h58
  2. Réponses: 9
    Dernier message: 27/04/2009, 13h58
  3. [JDBC][SQL Server]Connection Pooling
    Par WE dans le forum JDBC
    Réponses: 4
    Dernier message: 14/03/2006, 09h15
  4. [connection pool]commons DBCP
    Par horalass dans le forum JDBC
    Réponses: 2
    Dernier message: 20/12/2005, 11h02
  5. [Oracle 8i][Internet] Shared Pool Size
    Par dupin40 dans le forum Administration
    Réponses: 39
    Dernier message: 04/11/2004, 12h39

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