
[ http://jira.qos.ch/browse/LBCORE-220?page=com.atlassian.jira.plugin.system.i... ] Greg Thomas commented on LBCORE-220: ------------------------------------ I should have added at the time, I've submitted pull request 29 @ https://github.com/ceki/logback/pull/29 with a fix for this.
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