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 :

Performance des traitements batch


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 51
    Points : 40
    Points
    40
    Par défaut Performance des traitements batch
    Bonjour,

    Je cherche à améliorer la performance de mes traitements batch ( dizaines de milliers de requêtes).
    Quelqu'un a t il un astuce, un retour d’expérience ...

    Merci à l'avance

  2. #2
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Bonjour,
    Quel type de performance veux tu améliorer? consommation mémoire ? consommation CPU? temps d’exécution? réduction du nombre d'accès base?

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 51
    Points : 40
    Points
    40
    Par défaut
    Bonjour,

    ça concerne surtout le temps d’exécution.

  4. #4
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Alors voila ce que je proposerai:
    Remonte dans tes requêtes sql, et essaies de voir si tu peux réduire les accès base, optimise les requêtes pour qu'en une seule passe ca te ramène les résultats de 2 ou 3 passes. Surtout dans les accès base itératifs s'il en existe.Si tu parviens à le faire tu verras déjà un gain de temps de fou car rien de plus lourd en temps d’exécution que les accès base répétés et inutiles.

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 51
    Points : 40
    Points
    40
    Par défaut
    Effectivement, j'ai des accès base itératifs que je ne peut réduire malheureusement. J'ai vu sur le net qu'une meilleure gestion du "flush" permettrait de gagner du temps sur les opérations de mise à jour.
    En ce qui concerne les requêtes "select", je récupérerai seulement les champs dont j'ai besoin ( pas de select *).
    Il faudra peut être aussi regarder du coté des propriétés hibernate ( jdbc.batch_size,jdbc.fetch_size ...).

    Il faudra tester tout ça avant de tirer une quelconque conclusion.

  6. #6
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Pourquoi fais tu des flush dans un batch? je peux comprendre des flush dans une appli web pour une synchro des tables avec les entités managés, mais dans un batch c'est du one-shot normalement, on a besoin d'une entité, on l'extrait, la modifie et commite.Un flush effectivement est non consommateur de mémoire, mais si tu le fais en plus dans une boucle c'est énorme. C'est une fonction à utiliser avec beaucoup de parcimonie.Sans son appel, tes transactions ne sont pas commitées? pour tes rquêtes appelées itérativement je sais que c'est pas évident regarde si tu ne peux pas construire une seule requête avec des group by qui ferait le même taf que dans ton itération.

  7. #7
    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
    Montre nous ton code.
    Mais effectivement, il faut que tu adaptes la taille de la propriété batch size avec le nombre d'itérations au bout duquel tu flushes et vides la session.
    Il y a un chapitre qui explique bien cela dans la documentation.
    http://docs.jboss.org/hibernate/orm/..._single/#batch

  8. #8
    Membre régulier
    Inscrit en
    Janvier 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 51
    Points : 71
    Points
    71
    Par défaut
    Spring batch : Facile et assez performant

  9. #9
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 51
    Points : 40
    Points
    40
    Par défaut
    Au fait, il n'y a pas de code bien précis. Car ce que j'essaye d'optimiser est une surcouche qui gère la persistence. Cette surcouche sera utilisé par plusieurs autres traitements batch.

    Sinon, pour les insertions (update) itérative, je crois que comme vous l'aviez dit, le mieux serait de faire un flush et clean chaque fois que le nombre d’itérations dépasse le batch_size.

Discussions similaires

  1. [MySQL] Comment ecrivez-vous vos traitements batch
    Par ouioui2000 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 21/10/2005, 15h36
  2. Performance des Datasets
    Par Nafanga dans le forum Bases de données
    Réponses: 6
    Dernier message: 10/10/2005, 00h49
  3. performances des virtual functions
    Par xxiemeciel dans le forum C++
    Réponses: 2
    Dernier message: 25/07/2005, 17h24
  4. [Traitement batch]lancer un traitement independant des users
    Par Wessim dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 08/06/2005, 20h43
  5. Performance des vertex array
    Par Mathieu.J dans le forum OpenGL
    Réponses: 13
    Dernier message: 25/06/2004, 10h47

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