On Tuesday, August 5, 2014, Matt Sicker <[email protected]> wrote: > It's only on startup of the appender, so I don't think it's too big a > deal. I'm thinking of adding a setting to force enable/disable using batch > queries. >
That's a good idea. This would be a JDBC Appender option? On by default (if the DB supports it), but users can switch it off if it causes issues somehow. Sounds good! Theoretically this should give very nice performance benefits, but I haven't used it myself so I can't say. Has anyone ever used this in practice? > On 5 August 2014 06:40, Gary Gregory <[email protected] > <javascript:_e(%7B%7D,'cvml','[email protected]');>> wrote: > >> Curious: is there a perf hit in getting the connection metadata? >> >> Gary >> >> >> -------- Original message -------- >> From: [email protected] >> <javascript:_e(%7B%7D,'cvml','[email protected]');> >> Date:08/05/2014 00:35 (GMT-05:00) >> To: [email protected] >> <javascript:_e(%7B%7D,'cvml','[email protected]');> >> Subject: svn commit: r1615861 - >> /logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java >> >> >> Author: mattsicker >> Date: Tue Aug 5 04:35:41 2014 >> New Revision: 1615861 >> >> URL: http://svn.apache.org/r1615861 >> Log: >> Add basic batch update support for JDBC appender. >> >> - Part of LOG4J2-734 >> >> Modified: >> >> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java >> >> Modified: >> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java >> URL: >> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java?rev=1615861&r1=1615860&r2=1615861&view=diff >> >> ============================================================================== >> --- >> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java >> (original) >> +++ >> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java >> Tue Aug 5 04:35:41 2014 >> @@ -18,6 +18,7 @@ package org.apache.logging.log4j.core.ap >> >> import java.io.StringReader; >> import java.sql.Connection; >> +import java.sql.DatabaseMetaData; >> import java.sql.PreparedStatement; >> import java.sql.SQLException; >> import java.sql.Timestamp; >> @@ -43,6 +44,7 @@ public final class JdbcDatabaseManager e >> >> private Connection connection; >> private PreparedStatement statement; >> + private boolean isBatchSupported; >> >> private JdbcDatabaseManager(final String name, final int bufferSize, >> final ConnectionSource connectionSource, >> final String sqlStatement, final >> List<Column> columns) { >> @@ -53,8 +55,11 @@ public final class JdbcDatabaseManager e >> } >> >> @Override >> - protected void startupInternal() { >> - // nothing to see here >> + protected void startupInternal() throws Exception { >> + this.connection = this.connectionSource.getConnection(); >> + final DatabaseMetaData metaData = this.connection.getMetaData(); >> + this.isBatchSupported = metaData.supportsBatchUpdates(); >> + Closer.closeSilently(this.connection); >> } >> >> @Override >> @@ -109,7 +114,9 @@ public final class JdbcDatabaseManager e >> } >> } >> >> - if (this.statement.executeUpdate() == 0) { >> + if (this.isBatchSupported) { >> + this.statement.addBatch(); >> + } else if (this.statement.executeUpdate() == 0) { >> throw new AppenderLoggingException( >> "No records inserted in database table for log >> event in JDBC manager."); >> } >> @@ -125,6 +132,9 @@ public final class JdbcDatabaseManager e >> protected void commitAndClose() { >> try { >> if (this.connection != null && !this.connection.isClosed()) { >> + if (this.isBatchSupported) { >> + this.statement.executeBatch(); >> + } >> this.connection.commit(); >> } >> } catch (final SQLException e) { >> >> >> > > > -- > Matt Sicker <[email protected] > <javascript:_e(%7B%7D,'cvml','[email protected]');>> >
