Class SlowQueryReport
- java.lang.Object
-
- org.apache.tomcat.jdbc.pool.JdbcInterceptor
-
- org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor
-
- org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport
-
- org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReport
-
- All Implemented Interfaces:
java.lang.reflect.InvocationHandler
- Direct Known Subclasses:
SlowQueryReportJmx
public class SlowQueryReport extends AbstractQueryReport
Slow query report interceptor. Tracks timing of query executions.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classSlowQueryReport.QueryStatsHolds timing and invocation statistics for a single SQL query.static classSlowQueryReport.QueryStatsComparatorCompares QueryStats by their lastInvocation value.-
Nested classes/interfaces inherited from class org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport
AbstractQueryReport.StatementProxy
-
-
Field Summary
Fields Modifier and Type Field Description protected booleanlogFailedFlag to enable disable logging of failed queriesprotected booleanlogSlowFlag to enable disable logging of slow queriesprotected intmaxQueriesMaximum number of queries we will be storingprotected static java.util.concurrent.ConcurrentHashMap<java.lang.String,java.util.concurrent.ConcurrentHashMap<java.lang.String,SlowQueryReport.QueryStats>>perPoolStatswe will be keeping track of query stats on a per pool basisprotected java.util.concurrent.ConcurrentHashMap<java.lang.String,SlowQueryReport.QueryStats>queriesthe queries that are used for this interceptor.protected java.util.Comparator<SlowQueryReport.QueryStats>queryStatsComparatorSort QueryStats by last invocation time-
Fields inherited from class org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport
threshold
-
Fields inherited from class org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor
constructors, CREATE_STATEMENT, CREATE_STATEMENT_IDX, EXECUTE, EXECUTE_BATCH, EXECUTE_QUERY, EXECUTE_TYPES, EXECUTE_UPDATE, GET_GENERATED_KEYS, GET_RESULTSET, GET_STATEMENT, PREPARE_CALL, PREPARE_CALL_IDX, PREPARE_STATEMENT, PREPARE_STATEMENT_IDX, RESULTSET_IDX, STATEMENT_TYPE_COUNT, STATEMENT_TYPES
-
Fields inherited from class org.apache.tomcat.jdbc.pool.JdbcInterceptor
CLOSE_VAL, EQUALS_VAL, GETCONNECTION_VAL, HASHCODE_VAL, ISCLOSED_VAL, ISVALID_VAL, ISWRAPPERFOR_VAL, properties, TOSTRING_VAL, UNWRAP_VAL
-
-
Constructor Summary
Constructors Constructor Description SlowQueryReport()Creates a slow query report interceptor
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidcloseInvoked()invoked when the connection receives the close request Not used for now.static java.util.concurrent.ConcurrentHashMap<java.lang.String,SlowQueryReport.QueryStats>getPoolStats(java.lang.String poolname)Returns the query stats for a given poolprotected SlowQueryReport.QueryStatsgetQueryStats(java.lang.String sql)Retrieves or creates a QueryStats entry for the given SQL string.booleanisLogFailed()Returns whether failed query logging is enabled.booleanisLogSlow()Returns whether slow query logging is enabled.voidpoolClosed(ConnectionPool pool)Removes the query statistics map for the given connection pool.voidpoolStarted(ConnectionPool pool)Initializes the query statistics map for the given connection pool.voidprepareCall(java.lang.String sql, long time)Tracks the preparation time for a callable statement.voidprepareStatement(java.lang.String sql, long time)Tracks the preparation time for a prepared statement.protected voidremoveOldest(java.util.concurrent.ConcurrentHashMap<java.lang.String,SlowQueryReport.QueryStats> queries)Sort QueryStats by last invocation timeprotected java.lang.StringreportFailedQuery(java.lang.String query, java.lang.Object[] args, java.lang.String name, long start, java.lang.Throwable t)Invoked when a query execution, a call to execute/executeQuery or executeBatch failed.protected java.lang.StringreportQuery(java.lang.String query, java.lang.Object[] args, java.lang.String name, long start, long delta)Invoked when a query execution, a call to execute/executeQuery or executeBatch succeeded and was within the timing thresholdprotected java.lang.StringreportSlowQuery(java.lang.String query, java.lang.Object[] args, java.lang.String name, long start, long delta)Invoked when a query execution, a call to execute/executeQuery or executeBatch succeeded and was exceeded the timing thresholdvoidreset(ConnectionPool parent, PooledConnection con)Resets the query statistics reference when a connection is reset.voidsetLogFailed(boolean logFailed)Enables or disables failed query logging.voidsetLogSlow(boolean logSlow)Enables or disables slow query logging.voidsetMaxQueries(int maxQueries)Sets the maximum number of queries to track statistics for.voidsetProperties(java.util.Map<java.lang.String,PoolProperties.InterceptorProperty> properties)Configures this interceptor from the given properties map, supporting threshold, maxQueries, logSlow, and logFailed settings.-
Methods inherited from class org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport
createStatement, getThreshold, setThreshold
-
Methods inherited from class org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor
getConstructor, invoke, isExecute, isStatement, process
-
Methods inherited from class org.apache.tomcat.jdbc.pool.JdbcInterceptor
compare, compare, disconnected, getNext, getProperties, isUseEquals, setNext, setUseEquals
-
-
-
-
Field Detail
-
perPoolStats
protected static final java.util.concurrent.ConcurrentHashMap<java.lang.String,java.util.concurrent.ConcurrentHashMap<java.lang.String,SlowQueryReport.QueryStats>> perPoolStats
we will be keeping track of query stats on a per pool basis
-
queries
protected volatile java.util.concurrent.ConcurrentHashMap<java.lang.String,SlowQueryReport.QueryStats> queries
the queries that are used for this interceptor.
-
maxQueries
protected int maxQueries
Maximum number of queries we will be storing
-
logSlow
protected boolean logSlow
Flag to enable disable logging of slow queries
-
logFailed
protected boolean logFailed
Flag to enable disable logging of failed queries
-
queryStatsComparator
protected final java.util.Comparator<SlowQueryReport.QueryStats> queryStatsComparator
Sort QueryStats by last invocation time
-
-
Method Detail
-
getPoolStats
public static java.util.concurrent.ConcurrentHashMap<java.lang.String,SlowQueryReport.QueryStats> getPoolStats(java.lang.String poolname)
Returns the query stats for a given pool- Parameters:
poolname- - the name of the pool we want to retrieve stats for- Returns:
- a hash map containing statistics for 0 to maxQueries
-
setMaxQueries
public void setMaxQueries(int maxQueries)
Sets the maximum number of queries to track statistics for.- Parameters:
maxQueries- the maximum number of queries
-
reportFailedQuery
protected java.lang.String reportFailedQuery(java.lang.String query, java.lang.Object[] args, java.lang.String name, long start, java.lang.Throwable t)Description copied from class:AbstractQueryReportInvoked when a query execution, a call to execute/executeQuery or executeBatch failed.- Overrides:
reportFailedQueryin classAbstractQueryReport- Parameters:
query- the query that was executed and failedargs- the arguments to the executionname- the name of the method used to executeAbstractCreateStatementInterceptor.isExecute(Method, boolean)start- the time the query execution startedt- the exception that happened- Returns:
- - the SQL that was executed or the string "batch" if it was a batch execution
-
reportQuery
protected java.lang.String reportQuery(java.lang.String query, java.lang.Object[] args, java.lang.String name, long start, long delta)Description copied from class:AbstractQueryReportInvoked when a query execution, a call to execute/executeQuery or executeBatch succeeded and was within the timing threshold- Overrides:
reportQueryin classAbstractQueryReport- Parameters:
query- the query that was executed and failedargs- the arguments to the executionname- the name of the method used to executeAbstractCreateStatementInterceptor.isExecute(Method, boolean)start- the time the query execution starteddelta- the time the execution took- Returns:
- - the SQL that was executed or the string "batch" if it was a batch execution
-
reportSlowQuery
protected java.lang.String reportSlowQuery(java.lang.String query, java.lang.Object[] args, java.lang.String name, long start, long delta)Description copied from class:AbstractQueryReportInvoked when a query execution, a call to execute/executeQuery or executeBatch succeeded and was exceeded the timing threshold- Overrides:
reportSlowQueryin classAbstractQueryReport- Parameters:
query- the query that was executed and failedargs- the arguments to the executionname- the name of the method used to executeAbstractCreateStatementInterceptor.isExecute(Method, boolean)start- the time the query execution starteddelta- the time the execution took- Returns:
- - the SQL that was executed or the string "batch" if it was a batch execution
-
closeInvoked
public void closeInvoked()
invoked when the connection receives the close request Not used for now.- Specified by:
closeInvokedin classAbstractCreateStatementInterceptor
-
prepareStatement
public void prepareStatement(java.lang.String sql, long time)Tracks the preparation time for a prepared statement.- Specified by:
prepareStatementin classAbstractQueryReport- Parameters:
sql- the SQL statementtime- the time taken to prepare the statement
-
prepareCall
public void prepareCall(java.lang.String sql, long time)Tracks the preparation time for a callable statement.- Specified by:
prepareCallin classAbstractQueryReport- Parameters:
sql- the SQL calltime- the time taken to prepare the call
-
poolStarted
public void poolStarted(ConnectionPool pool)
Initializes the query statistics map for the given connection pool.- Overrides:
poolStartedin classJdbcInterceptor- Parameters:
pool- the connection pool that has started
-
poolClosed
public void poolClosed(ConnectionPool pool)
Removes the query statistics map for the given connection pool.- Overrides:
poolClosedin classJdbcInterceptor- Parameters:
pool- the connection pool that has been closed
-
getQueryStats
protected SlowQueryReport.QueryStats getQueryStats(java.lang.String sql)
Retrieves or creates a QueryStats entry for the given SQL string.- Parameters:
sql- the SQL query string- Returns:
- the query statistics, or
nullif the pool has been closed
-
removeOldest
protected void removeOldest(java.util.concurrent.ConcurrentHashMap<java.lang.String,SlowQueryReport.QueryStats> queries)
Sort QueryStats by last invocation time- Parameters:
queries- The queries map
-
reset
public void reset(ConnectionPool parent, PooledConnection con)
Resets the query statistics reference when a connection is reset.- Overrides:
resetin classAbstractCreateStatementInterceptor- Parameters:
parent- the connection poolcon- the pooled connection being reset
-
isLogSlow
public boolean isLogSlow()
Returns whether slow query logging is enabled.- Returns:
trueif slow query logging is enabled
-
setLogSlow
public void setLogSlow(boolean logSlow)
Enables or disables slow query logging.- Parameters:
logSlow-trueto enable slow query logging
-
isLogFailed
public boolean isLogFailed()
Returns whether failed query logging is enabled.- Returns:
trueif failed query logging is enabled
-
setLogFailed
public void setLogFailed(boolean logFailed)
Enables or disables failed query logging.- Parameters:
logFailed-trueto enable failed query logging
-
setProperties
public void setProperties(java.util.Map<java.lang.String,PoolProperties.InterceptorProperty> properties)
Configures this interceptor from the given properties map, supporting threshold, maxQueries, logSlow, and logFailed settings.- Overrides:
setPropertiesin classJdbcInterceptor- Parameters:
properties- the interceptor properties
-
-