Re: Out of memory when using in-memory H2 memory database.

218 views
Skip to first unread message

Noel Grandin

unread,
Jan 28, 2013, 5:12:59 AM1/28/13
to h2-da...@googlegroups.com, pan dehong, Thomas Mueller

Can you upload the dump somewhere?

LOG=0 is for internal debugging and testing only.
DO NOT USE IT.
Thomas, this feature is a serious footgun - please can we just delete this LOG=0 thing?


On 2013-01-24 03:51, pan dehong wrote:
hi,

I use H2 as in-memory database for jBPM. in my case, there are lots of inserts/updates/deletes, but each table only has very limited records,(max 10 records), there are total about 15 tables.

During my performance testing, I always ran into out-of-memory exception after couple hours. I found the record numbers are correct, and when I use 'script to' command to export the database, the whole file is less than 1M.
But in the memory dump, I found the following:


Class Name                         |   Objects | Shallow Heap | Retained Heap
------------------------------------------------------------------------------
.*org.h2.result.*                  |           |              |              
org.h2.result.Row                  |   186,953 |    7,478,120 |   539,815,536
org.h2.result.LocalResult          |        33 |        2,376 |      >= 7,624
org.h2.result.SortOrder            |         6 |          144 |        >= 424
org.h2.result.Row[]                |         1 |           16 |         >= 16
org.h2.result.ResultExternal       |         0 |            0 |              
org.h2.result.ResultInterface      |         0 |            0 |              
org.h2.result.SearchRow            |         0 |            0 |          >= 8
org.h2.result.RowList              |         0 |            0 |              
org.h2.result.SimpleRow            |         0 |            0 |              
org.h2.result.UpdatableRow         |         0 |            0 |              
org.h2.result.ResultTarget         |         0 |            0 |              
Total: 11 entries (27,510 filtered)|   186,993 |    7,480,656 |    


I use the following url
<prop key="URL">jdbc:h2:mem:taskDB</prop>
and I tried to change the URL with one or more than one of following parameters

;MVCC=TRUE;DB_CLOSE_DELAY=-1;LOG=0

But the result is same. I always run into out-of-memory.

I tried the latest version 1.3.170 and previous version as well.

I do have blob objects in my database, and insert/delete the blob many times.

Any suggestion?

Thanks
--
You received this message because you are subscribed to the Google Groups "H2 Database" group.
To view this discussion on the web visit https://groups.google.com/d/msg/h2-database/-/sCQTIq0F784J.
To post to this group, send email to h2-da...@googlegroups.com.
To unsubscribe from this group, send email to h2-database...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/h2-database?hl=en.

Thomas Mueller

unread,
Jan 28, 2013, 2:05:24 PM1/28/13
to H2 Google Group
Hi,

can we just delete this LOG=0 thing?

Yes and no. 

With the current storage engine, it basically doubles write performance. This is very good for initial data loading.

With the new storage engine (the MVStore), there will be no transaction log (at least when using one connection), so LOG=0 will have no effect, so all write operations are fast.

So the long term goal is to make it unnecessary.

The problem above sounds like something else (out of memory), because of result sets that are kept in memory. Why I can't tell; I don't know what the application does.

Regards,
Thomas



To unsubscribe from this group and stop receiving emails from it, send an email to h2-database...@googlegroups.com.

To post to this group, send email to h2-da...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages