Eric,

Thanks for the suggestion.  I am not sure about the MULTI_THREADED
setting for production use, but I gave it a try in the benchmark.

I also reworked the benchmark so that the only action in the worker
threads is the DB insert.  The results are the time in milliseconds to
insert 100,000 rows where each thread has a dedicated table.  The jvm
was allowed to warm up and test were run multiple times then averaged.

Original DB URL
1 thread - 2725
2 thread - 2838
4 thread - 2796
8 thread - 2761

MULTI_THREADED DB URL
1 thread - 2702
2 thread - 2041
4 thread - 1447
8 thread - 1667

The results look better using MULTI_THREADED but the 8 thread was
slower than the 4 thread on every test run.  This was unexpected as I
am testing on a true 8 core server, no hyperthreading.  Also, running
MULTI_THREADED where multiple threads insert into the same table did
not increase performance at all.

To check my benchmark I replaced the DB insert with a random number
generator just to see best case scenario for scaling.
1 thread - 4374
2 thread - 2632
4 thread - 1471
8 thread - 1158


It looks like there is no easy way to increase insert performance into
a single table.  You can use multiple threads - but not too many -
along with the MULTI_THREADED setting along with multiple tables, but
this make queries that much more difficult to implement (could views
help with this?).

Any other ideas?


Thanks,

Greg




On Sep 18, 3:35 pm, Eric Faulhaber <[email protected]> wrote:
> Greg,
>
> Try this:
>
> jdbc:h2:mem:testdb;MULTI_THREADED=1
>
> Any improvement in the multi-threaded tests?
>
> Thanks,
> Eric
>
> On Sep 18, 11:43 am, GregB <[email protected]> wrote:
>
>
>
> > First off thanks Thomas for all the great work - after switching from
> > Derby to H2 everything runs twice as fast!
>
> > Still I find that we are limited by insert performance.  I wrote up a
> > small test to insert 100,000 rows and found -
> > with single thread and single table - 11,000 rows per second
> > with 8 threads and single table - 14,000 rows per second
> > with 8 threads and 8 tables - 14,000 rows per second
>
> > Tests were done on an 8 core Linux server with an embedded in-memory
> > database.  With the multi thread tests CPU usage was around 30%-40%
> > per for each core.  The db url is jdbc:h2:mem:testdb.
>
> > My biggest surprise was that the 8 table test was no faster.  I would
> > expect with no contention for table locks this would scale better.  Is
> > there any recommended configuration to allow better insert
> > performance?
>
> > Thanks,
>
> > Greg
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/h2-database?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to