-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 6 posts ] 
Author Message
 Post subject: Mémoire et batch processing
PostPosted: Wed Aug 10, 2005 4:40 am 
Newbie

Joined: Tue Aug 02, 2005 10:50 am
Posts: 6
Salut,

J'essaie d'insérer dans une table SQL une quantité de donnée relativement importante (2500 enregistrement) qui doivent en plus être liée avec d'autres tables ...
Comme j'ai lu dans la documentation hibernate que le batch processing était assez gourmand en mémoire j'ai utilisé leur astuce qui consiste à rafraichir l'objet session tout les certains laps de temps.

Cette astuce fonctionne donc bien mais au bout d'un certain temps (environ vers le 500 enregistrement) apparait un message d'erreur pour tous les enregistrements suivants :

2005-08-10 10:28:43,017 ERROR org.hibernate.event.def.AbstractFlushingEventListener java - Could not synchronize database state with session
org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update

... cette exception se produit au moment ou je réalise le tx.commit sur le 501ème enregistement.

Je ne comprends pas trop pourquoi ce message apparait à ce moment la (pourquoi pas au premier rafraichissement de session qui lui ce fait tout les 20 enregistrements).

Je ne pense pas que l'erreur vienne de mon code car si je met pas en place l'astuce hibernate pour le batch processing (effacement de la mémoire) les insertions vont beaucoup beaucoup moins vite mais fonctionnent pour tous les enregistrements.

Merci d'avance pour votre aide ou vos réflexions

_________________
HuGuEs


Top
 Profile  
 
 Post subject:
PostPosted: Wed Aug 10, 2005 4:43 am 
Expert
Expert

Joined: Thu Sep 04, 2003 8:23 am
Posts: 368
C'est quoi exactement l'astuce ?
Peux tu mettre un bout de code pour voir ce que tu fais.
Il peut être intéressant de faire régulièrement un clear de la session ou bien de reprendre une nouvelle session.

_________________
Seb
(Please don't forget to give credits if you found this answer useful :)


Top
 Profile  
 
 Post subject:
PostPosted: Wed Aug 10, 2005 4:50 am 
Newbie

Joined: Tue Aug 02, 2005 10:50 am
Posts: 6
L'astuce est grosso modo la suivante :

Code:
// Enregistrement du ième prospect
rech_prospect.setProspect(prospect);
// Tout les 20 enregistrements (la taille du JDBC batch) on réinitialise la
// session.
if (i%20==0) {
  log.info("Rafraichissement de la session hibernate");
  Session session = HibernateUtil.currentSession();
  session.flush();
  session.clear();
}


Ce code fonctionne très bien pour les 500 premiers enregistrement mais après ca plante ...

_________________
HuGuEs


Top
 Profile  
 
 Post subject:
PostPosted: Wed Aug 10, 2005 4:59 am 
Expert
Expert

Joined: Thu Sep 04, 2003 8:23 am
Posts: 368
2 questions supplémentaires

- As tu une stack trace plus complète pour voir où ça plante
- Tu parles dans ton premier post de tx.commit mais il n'y a pas de tx.commit dans ton exemple de code

_________________
Seb
(Please don't forget to give credits if you found this answer useful :)


Top
 Profile  
 
 Post subject:
PostPosted: Wed Aug 10, 2005 6:14 am 
Newbie

Joined: Tue Aug 02, 2005 10:50 am
Posts: 6
Oui j'ai une stack trace plus complète le problème est quelle fait réference à la classe rechProspect (c'est elle d'ailleurs qui contient le commit()).
En fait j'ai essayer de simplifier l'explication de mon problème.

Mais je peux si tu le souhaites t'envoyer tout le code source nécessaire à la compréhension du problème ...

Merci d'avance

_________________
HuGuEs


Top
 Profile  
 
 Post subject:
PostPosted: Wed Aug 10, 2005 8:49 am 
Expert
Expert

Joined: Thu Sep 04, 2003 8:23 am
Posts: 368
L'idéal serait d'avoir juste la stack trace de l'exception pour voir d'où vient exactement l'erreur ainsi que tout le code qui faire référence à hibernate. Mets tout ça dans un message pour que tout le monde puisse voir

_________________
Seb
(Please don't forget to give credits if you found this answer useful :)


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 6 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.