Class 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.
    • 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
    • Constructor Detail

      • SlowQueryReport

        public SlowQueryReport()
        Creates a slow query report interceptor
    • 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: AbstractQueryReport
        Invoked when a query execution, a call to execute/executeQuery or executeBatch failed.
        Overrides:
        reportFailedQuery in class AbstractQueryReport
        Parameters:
        query - the query that was executed and failed
        args - the arguments to the execution
        name - the name of the method used to execute AbstractCreateStatementInterceptor.isExecute(Method, boolean)
        start - the time the query execution started
        t - 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: AbstractQueryReport
        Invoked when a query execution, a call to execute/executeQuery or executeBatch succeeded and was within the timing threshold
        Overrides:
        reportQuery in class AbstractQueryReport
        Parameters:
        query - the query that was executed and failed
        args - the arguments to the execution
        name - the name of the method used to execute AbstractCreateStatementInterceptor.isExecute(Method, boolean)
        start - the time the query execution started
        delta - 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: AbstractQueryReport
        Invoked when a query execution, a call to execute/executeQuery or executeBatch succeeded and was exceeded the timing threshold
        Overrides:
        reportSlowQuery in class AbstractQueryReport
        Parameters:
        query - the query that was executed and failed
        args - the arguments to the execution
        name - the name of the method used to execute AbstractCreateStatementInterceptor.isExecute(Method, boolean)
        start - the time the query execution started
        delta - the time the execution took
        Returns:
        - the SQL that was executed or the string "batch" if it was a batch execution
      • prepareStatement

        public void prepareStatement​(java.lang.String sql,
                                     long time)
        Tracks the preparation time for a prepared statement.
        Specified by:
        prepareStatement in class AbstractQueryReport
        Parameters:
        sql - the SQL statement
        time - 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:
        prepareCall in class AbstractQueryReport
        Parameters:
        sql - the SQL call
        time - the time taken to prepare the call
      • poolStarted

        public void poolStarted​(ConnectionPool pool)
        Initializes the query statistics map for the given connection pool.
        Overrides:
        poolStarted in class JdbcInterceptor
        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:
        poolClosed in class JdbcInterceptor
        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 null if 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
      • isLogSlow

        public boolean isLogSlow()
        Returns whether slow query logging is enabled.
        Returns:
        true if slow query logging is enabled
      • setLogSlow

        public void setLogSlow​(boolean logSlow)
        Enables or disables slow query logging.
        Parameters:
        logSlow - true to enable slow query logging
      • isLogFailed

        public boolean isLogFailed()
        Returns whether failed query logging is enabled.
        Returns:
        true if failed query logging is enabled
      • setLogFailed

        public void setLogFailed​(boolean logFailed)
        Enables or disables failed query logging.
        Parameters:
        logFailed - true to 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:
        setProperties in class JdbcInterceptor
        Parameters:
        properties - the interceptor properties