JDBC persistence adapter improvements
-------------------------------------

                 Key: AMQ-2063
                 URL: https://issues.apache.org/activemq/browse/AMQ-2063
             Project: ActiveMQ
          Issue Type: Improvement
          Components: Message Store
    Affects Versions: 5.3.0
         Environment: RHEL 5, Linux 2.6.18, java 1.6.0_05-b13
            Reporter: Eugene Strulyov
             Fix For: 5.3.0


Hi all,

I made the following improvements to the JDBC persistence adapter:

1. Implemented PostgresqlJDBCAdapter.doDeleteOldMessages() method that is at 
least three orders of magnitude faster than the default implementation. The 
same optimization may apply to other databases so you may want to consider 
moving it to DefaultJDBCAdapter.

2. Changed DefaultJDBCAdapter.doRecoverNextMessages() to always process at 
least 1000 messages at a time. This results in a huge performance improvement. 
However, this implementation is a hack (see comment). Somebody may want to look 
into why maxReturned gets set to 1 on the third call to 
doRecoverNextMessages(). I was able to consistently reproduce this behaviour.

3. Fixed JDBCPersistenceAdapter so that it does not double-call cleanup() [once 
in the main thread, once in the worker thread], and also so that it does not 
hang ActiveMQ initialization when there are lots of pending messages.

Performance is now limited by repeated calls to 
JDBCTopicMessageStore.acknowledge(). This causes an update for every single 
message (updates last_acked_id in activemq_acks table). I don't know enough 
about ActiveMQ architecture to optimize this, but perhaps someone should look 
into this. For example, if it only did this update after processing a batch of 
messages (say 1000 at a time), it would be a lot faster. The current 
implementation keeps incrementing last_acked_id, once per delivered message.

Diffs attached.

Eugene 

Here is original post on the developer forum: 
http://www.nabble.com/JDBC-persistence-adapter-improvements-td21086330.html#a21086330

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to