[ 
http://issues.apache.org/jira/browse/DERBY-465?page=comments#action_12316402 ] 

Mike Matrigali commented on DERBY-465:
--------------------------------------

1)   I look forward to your subsequent posting the files you are using get your 
results.  It seems important when publishing
      performance results to make it possible for others to reproduce your work.
      This will also help me be able to understand the problems you are running 
into.

2) For multi-user read tests, given that the results are for 100 cyles, which 
means each thread is retrieving 100*100,000 rows, then the
     numbers for Derby seem at least to be the right order of magnitude.  The 
10 user number is a little slower than I would have guessed,
     I was hoping for somthing in the range of 3 times the 2 user number. 
     We see approximately 100,000 rows/second for a single thread.  If you plan 
on doing
     any more runs, here are the thread numbers I would use for a 4 processor 
machine: 1, 2, 3, 4, 8, 16.  These numbers can show
     better how the tested db is scaling across the available processors.  
Especially for the select run
     I would expect Derby to have relatively flat elapsed time from 2,3,4 and 
then start to see a steady increase as more threads are
     added.

     Are you sure there were no problems with your PB runs?  It definitely 
seems strange that the 1 user run is more than the 2, 5, and
     10 user runs.  And retrieving and processing 10,000,000 rows in 1 second 
seems unlikely.   In my work in the past sometimes 
     I would get problems in my setup and get results like this, and not see 
them in the program especially if like in your tests there
     is no sanity checking to see that the expected number of rows are 
processed and/or the right results are returned.

3) from description of tests or the included source code I could not tell the 
following:
     o are multi-user tests auto commit or not in the delete/update phase.
     o if they are not auto commit, when does the commit happen?  I think the 
isAutoCommit flag is set in a module that you have not posted.

4) lock escalation/timeout issues
     o I can answer better once I know answer to 3, but I am going to assume 
the test is not auto commit as you are committing
        the insert every 10 rows, so am going to assume the update and delete 
happen in on transaction.  
     o As you found your test happened to exactly match the lock escalation 
threshhold.  For best multi-user operation I suggest you 
         raise the lock escalation threshhold to something like 10000.
     o In answer to your question, derby will attempt to escalate to table 
locking once it reaches the threshold, but if it can't get the 
         the table level lock then it will continue to get row locks - it was 
decided it was better to continue to use more memory rather
         than fail the statement at this point.  This process is time consuming 
so for better performance if you 
         expect an application to run concurrently and get more that 5000 locks 
it is recommended you raise the escalate threshhold.
        It would seem in your concurrent application, that escalation other 
than the single user case is almost never possible (but is totally timing 
dependent).
        So as expected the update or delete is waiting on a row lock that is 
blocked because another thread has the row locked 
        for longer than the lock timeout threshhold.   

        I am not sure if somehow your program is not committing as expected, or 
if without an appropriate index the update and delete operations
        are taking too long, causing time outs in other threads waiting on 
them.  To debug this issue I recommend using the above mentioned faq to
        enable printing the lock table when the timeout occurs - but warn that 
it is probably going to be very large with 1000's of row locks.

5) To get a more direct comparison would you consider running pointbase with 
log.forcewrite=true.  This is especially appropriate if your target 
     application depends on the recoverability of committed transactions.  

> Embedded Derby-PointBase comparison
> -----------------------------------
>
>          Key: DERBY-465
>          URL: http://issues.apache.org/jira/browse/DERBY-465
>      Project: Derby
>         Type: Wish
>   Components: Test
>     Versions: 10.0.2.1, 10.0.2.0
>  Environment: Windows Server 2003, 4 processors, summary CPU 3.00 Ghz, RAM 1 
> Gb
>     Reporter: Peter Kovgan
>  Attachments: Benchmarks_info_independent.doc, DBOperations.java, 
> Multithreading-access read.doc, User.java, derby-optimization.doc, 
> derby-pb1.doc
>
> I have tested 4 major embedded DB.
> I have found that major disadvantage of Derby is 
> 1)low insert speed and 
> 2)significant performance degradation in select, update, delete  operation 
> speed starting from some table size.
> PointBase in comparison has not such degradation.
> It will be better if you improve your product.
> Good luck and thank you.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to