you, *500 times*
(a) obtain a new JDBC connection (b) start a transaction (c) do some work (d) commit the transaction and close the JDBC connection
and you are surprised that this is slow??
Why would you not do it all in one transaction? Starting and stopping transactions is one of _the_ most expensive operations you can do with a database.
jiesheng zhang wrote:
First I have a source class like this. public class Source { Transaction tx;
List pendingRemovedItems; public void beginTransaction() { // here I use ThreadLocal pattern. tx= ThreadState.getSession().beginTransaction(); }
public void commit() { try { // I need to explicitly delete all items that need deletion. for (Iterator iter= pendingRemovedItems.iterator(); iter.hasNext(); ) { ThreadState.getSession().delete(iter.next()); }
tx.commit(); logger.info(" db source is commited"); pendingRemovedItems.clear(); } finally { tx= null; } } // other variables and methods in source. }
My application code is like this Source src=...; // when control comes here, there are about 500 persistence objects in session. 1. src.beginTransaction(); 2. // here an new transient object is persisted. 3. src.commit();
The code fragment 1, 2, and 3 will be run 300 to 500
times.
The following is sql code dumped from hibernate. That is exactly what I expected. I only show 2 of them. The timestamp indicated that each insertion was about one second.
I am happy to provide any extra information.
2003-9-12 12:31:02 .... Info: found cached source Hibernate: select seq_resourceID.nextval from dual Hibernate: insert into contact (luid, dbId, guid, namefirst, namelast, nameother, nameprefix, namesuffix, title, role, orgname, orgunit, birthday, url, nickname, timezone, note, binary, categories, class, contactID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'd', ?) Hibernate: insert into phonenumber (contactID, num, type) values (?, ?, ?) Hibernate: insert into email (contactID, email, type) values (?, ?, ?) 2003-9-12 12:31:03 ... Info: db source is commited 2003-9-12 12:31:03 ....
2003-9-12 12:31:03 ... Info: found cached source Hibernate: select seq_resourceID.nextval from dual Hibernate: insert into contact (luid, dbId, guid, namefirst, namelast, nameother, nameprefix, namesuffix, title, role, orgname, orgunit, birthday, url, nickname, timezone, note, binary, categories, class, contactID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'd', ?) Hibernate: insert into email (contactID, email, type) values (?, ?, ?) Hibernate: insert into phonenumber (contactID, num, type) values (?, ?, ?) 2003-9-12 12:31:04 ... Info: db source is commited
--- Gavin King <[EMAIL PROTECTED]> wrote:
the transaction. My code is like this
Tranaction tx=sessiob.beginTransaction(); foo.setField(newValue); tx.commit();
Well, obviously it is not like that, since that code does not load any objects into the session.
Yes.1. When the commit() is called, will the hibernate loop through every object in the session and check for modification?
2. If it does, is it an expensive operation?No, not at all.
Any suggestion to solve the performance bottleneckin
my situation is really appreacited.Exactly what does your code *really* look like?
__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com
------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ hibernate-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/hibernate-devel