Uploaded image for project: 'logback'
  1. logback
  2. LOGBACK-126

DBAppender.java performance improvement

    Details

    • Type: Bug
    • Status: Open
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: logback-core
    • Labels:
      None

      Description

      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.

        Attachments

          Activity

            People

            • Assignee:
              logback-dev Logback dev list
              Reporter:
              gdt Greg Thomas
            • Votes:
              2 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated: