jean
jean

Reputation: 2990

hibernate transaction commit extremely slow when the session cache huge objects

Two table A(25k rows) and B(2.2m rows), use hibernate session load all those data(each row represent one object) then do update only one row in A and one row in B in a transaction, I found hibernate behavior is strange: the commit consume about 1.5 seconds to return. However the sql database's log shows the sql update command only consume several milliseconds. hibernate consume most of the time before flush the sql command to database.

So I use jprofiler to find out what it doing:

the cpu recording data

There are no clues about how the time was consumed. Due to database execute update command very fast, so it must not be blocked by database. If it was doing computation, it should be record by jprofiler(cpu time consuming).

What hibernate doing here? Why the commit so slow?

Upvotes: 1

Views: 2692

Answers (1)

ewramner
ewramner

Reputation: 6278

If you have loaded over 2 million objects that are sitting in Hibernate's first level cache you should not be surprised that things are a bit slow. The time is most likely spent going through all those objects looking for changes. If you know that you don't need an object you can evict it from the cache. That will reduce memory consumption and speed up the eventual commit. Just take care not to evict objects that are actually needed or you will create nasty bugs!

Upvotes: 2

Related Questions