Author: catholicon
Date: Sun Apr 7 01:17:28 2019
New Revision: 1857057
URL: http://svn.apache.org/viewvc?rev=1857057&view=rev
Log:
OAK-8148: [Indexing] Implement sling metric to calculate number of slow
queries(relative to all queries)
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineSettings.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/stats/QueryStatsData.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineSettings.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineSettings.java?rev=1857057&r1=1857056&r2=1857057&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineSettings.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineSettings.java
Sun Apr 7 01:17:28 2019
@@ -76,7 +76,7 @@ public class QueryEngineSettings impleme
public static final boolean DEFAULT_FAST_QUERY_SIZE =
Boolean.getBoolean(OAK_FAST_QUERY_SIZE);
private boolean fastQuerySize = DEFAULT_FAST_QUERY_SIZE;
- private QueryStatsMBeanImpl queryStats = new QueryStatsMBeanImpl(this);
+ private final QueryStatsMBeanImpl queryStats = new
QueryStatsMBeanImpl(this);
/**
* StatisticsProvider used to record query side metrics.
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java?rev=1857057&r1=1857056&r2=1857057&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
Sun Apr 7 01:17:28 2019
@@ -503,7 +503,7 @@ public class SelectorImpl extends Source
private boolean nextInternal() {
while (cursor != null && cursor.hasNext()) {
scanCount++;
- query.getQueryExecutionStats().scan(1, scanCount);
+ query.getQueryExecutionStats().scan(1, scanCount,
query.getSettings());
currentRow = cursor.next();
if (isParent) {
// we must not check whether the _parent_ is readable
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/stats/QueryStatsData.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/stats/QueryStatsData.java?rev=1857057&r1=1857056&r2=1857057&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/stats/QueryStatsData.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/stats/QueryStatsData.java
Sun Apr 7 01:17:28 2019
@@ -17,6 +17,10 @@
package org.apache.jackrabbit.oak.query.stats;
import org.apache.jackrabbit.oak.commons.json.JsopBuilder;
+import org.apache.jackrabbit.oak.query.QueryEngineSettings;
+import org.apache.jackrabbit.oak.stats.CounterStats;
+import org.apache.jackrabbit.oak.stats.HistogramStats;
+import org.apache.jackrabbit.oak.stats.StatsOptions;
public class QueryStatsData {
@@ -43,6 +47,8 @@ public class QueryStatsData {
private long readNanos;
private long maxTimeNanos;
private boolean captureStackTraces;
+ private boolean isSlowQuery = false;
+ private boolean updateTotalQueryHistogram = true;
public QueryStatsData(String query, String language) {
this.query = query;
@@ -138,6 +144,12 @@ public class QueryStatsData {
public class QueryExecutionStats {
long time;
+ private final long SLOW_QUERY_HISTOGRAM = 1;
+ private final long TOTAL_QUERY_HISTOGRAM = 0;
+ private final String SLOW_QUERY_PERCENTILE_METRICS_NAME =
"SLOW_QUERY_PERCENTILE_METRICS";
+ private final String SLOW_QUERY_COUNT_NAME = "SLOW_QUERY_COUNT";
+ private final int SLOW_QUERY_LIMIT_SCANNED =
+ Integer.getInteger("oak.query.slowScanLimit", 100000);
public void execute(long nanos) {
QueryRecorder.record(query, internal);
@@ -171,10 +183,23 @@ public class QueryStatsData {
maxTimeNanos = Math.max(maxTimeNanos, time);
}
- public void scan(long count, long max) {
+ public void scan(long count, long max, QueryEngineSettings
queryEngineSettings) {
totalRowsScanned += count;
maxRowsScanned = Math.max(maxRowsScanned, max);
- }
+ long maxScannedLimit = Math.min(SLOW_QUERY_LIMIT_SCANNED,
queryEngineSettings.getLimitReads());
+ if (updateTotalQueryHistogram) {
+ updateTotalQueryHistogram = false;
+ HistogramStats histogramStats =
queryEngineSettings.getStatisticsProvider().getHistogram(SLOW_QUERY_PERCENTILE_METRICS_NAME,
StatsOptions.METRICS_ONLY);
+ histogramStats.update(TOTAL_QUERY_HISTOGRAM);
+ }
+ if (totalRowsScanned >= maxScannedLimit && !isSlowQuery) {
+ isSlowQuery = true;
+ HistogramStats histogramStats =
queryEngineSettings.getStatisticsProvider().getHistogram(SLOW_QUERY_PERCENTILE_METRICS_NAME,
StatsOptions.METRICS_ONLY);
+ histogramStats.update(SLOW_QUERY_HISTOGRAM);
+ CounterStats slowQueryCounter =
queryEngineSettings.getStatisticsProvider().getCounterStats(SLOW_QUERY_COUNT_NAME,
StatsOptions.METRICS_ONLY);
+ slowQueryCounter.inc();
+ }
+ }
}
}
\ No newline at end of file