[logback-dev] [JIRA] Commented: (LBCORE-220) DBAppender.java performance improvement

Ceki Gulcu (JIRA) noreply-jira at qos.ch
Fri Oct 28 20:20:12 CEST 2011


    [ http://jira.qos.ch/browse/LBCORE-220?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12239#action_12239 ] 

Ceki Gulcu commented on LBCORE-220:
-----------------------------------

Hi Greg, 

I had already seen the pull request thanks. I can see why relaxing synchronization would improve performance. However, 
it is not obvious to me why the result would still be safe. In particular, I don't see what "connection specific" entails. Regardless, I'd like to test the assumption that the proposed modifications preserve the safety of insertion ids. This could be done by making several hundred insertions from several threads and then checking that the resulting records are coherent.

Would you care to implement this test and run it on say Postgres, MySQL, H2, MS SQLServer and Oracle? To be totally frank, I'd love to delegate responsibility of DBAppender to someone knowledgeable like yourself. Wink wink.


> DBAppender.java performance improvement
> ---------------------------------------
>
>                 Key: LBCORE-220
>                 URL: http://jira.qos.ch/browse/LBCORE-220
>             Project: logback-core
>          Issue Type: Bug
>          Components: Other
>    Affects Versions: 0.9.29
>            Reporter: Greg Thomas
>            Assignee: Logback dev list
>
> We're seeing a distinct lack of performance with the DBAppender. 
> Although it works fine in a single threaded environment, in a multi-threaded environment it slows down considerably. We've done some investigation, and narrowed it down to the pair of synchronized calls to subAppend() and selectEventId() (lines 107->110).
> I've had a look at this, and can see no reason for these to be synchronized;
> If using the JDBC3 getGeneratedKeys() method then as this applies to the thread specific statement there is no need to be synchronized.
> All the "Dialect" based calls are also connection specific; in detail;
> H2, HSQLDB and MySQL all call a database function, which is connection specific.
> MsSQL and Sybase both select a connection specific variable.
> Oracle and PostgreSQL both select the currval from a sequence, which again is connection specific.
> Having removed the synchronisation, we're seeing vastly improved logging throughput in our application.
> So to summarise; there is unnecessary synchronisation in the DBAppender that slows down multi-threaded applications; removing that synchronisation will improve performance in multi-threaded applications with no side affects.

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

        


More information about the logback-dev mailing list