[ASTERIXDB-3278][API] Add buffercache page read count to metrics
- user model changes: yes
- storage format changes: no
- interface changes: no
Details:
Push this up from the ratio calculation to the metrics as well
Change-Id: I568a2df4594bdde19932ba72362c9c61a96a9183
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17959
Reviewed-by: Ian Maxon <imaxon@uci.edu>
Reviewed-by: Wail Alkowaileet <wael.y.k@gmail.com>
Tested-by: Ian Maxon <imaxon@uci.edu>
Contrib: Ian Maxon <imaxon@uci.edu>
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/IStatementExecutor.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/IStatementExecutor.java
index 34d0c80..b624c9b 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/IStatementExecutor.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/IStatementExecutor.java
@@ -139,6 +139,7 @@
private long totalWarningsCount;
private long compileTime;
private double bufferCacheHitRatio;
+ private long bufferCachePageReadCount;
public long getCount() {
return count;
@@ -213,6 +214,14 @@
public double getBufferCacheHitRatio() {
return bufferCacheHitRatio;
}
+
+ public void setBufferCachePageReadCount(long bufferCachePageReadCount) {
+ this.bufferCachePageReadCount = bufferCachePageReadCount;
+ }
+
+ public long getBufferCachePageReadCount() {
+ return bufferCachePageReadCount;
+ }
}
class Profile implements Serializable {
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/ResultMetadata.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/ResultMetadata.java
index f47fce1..af06817 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/ResultMetadata.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/ResultMetadata.java
@@ -27,7 +27,7 @@
import com.fasterxml.jackson.databind.node.ObjectNode;
public class ResultMetadata implements IResultMetadata {
- private static final long serialVersionUID = 1905367559307369035L;
+ private static final long serialVersionUID = 1905367559307369036L;
private final SessionConfig.OutputFormat format;
private long jobDuration;
@@ -39,6 +39,7 @@
private long totalWarningsCount;
private transient List<Object> outputTypes;
private long queueWaitTimeInNanos;
+ private long bufferCachePageReadCount;
public ResultMetadata(SessionConfig.OutputFormat format) {
this.format = format;
@@ -68,6 +69,14 @@
return bufferCacheHitRatio;
}
+ public void setBufferCachePageReadCount(long bufferCachePageReadCount) {
+ this.bufferCachePageReadCount = bufferCachePageReadCount;
+ }
+
+ public long getBufferCachePageReadCount() {
+ return bufferCachePageReadCount;
+ }
+
public void setWarnings(Set<Warning> warnings) {
this.warnings = warnings;
}
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java
index a5e13c1..1809166 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java
@@ -208,6 +208,7 @@
stats.setCompileTime(responseStats.getCompileTime());
stats.setQueueWaitTime(responseStats.getQueueWaitTime());
stats.setBufferCacheHitRatio(responseStats.getBufferCacheHitRatio());
+ stats.setBufferCachePageReadCount(responseStats.getBufferCachePageReadCount());
}
private static void updatePropertiesFromCC(IStatementExecutor.StatementProperties statementProperties,
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryResultApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryResultApiServlet.java
index ad2a5b5..c2e8dca 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryResultApiServlet.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryResultApiServlet.java
@@ -103,7 +103,7 @@
ResponseMetrics metrics = ResponseMetrics.of(System.nanoTime() - elapsedStart,
metadata.getJobDuration(), stats.getCount(), stats.getSize(), metadata.getProcessedObjects(), 0,
metadata.getTotalWarningsCount(), stats.getCompileTime(), stats.getQueueWaitTime(),
- stats.getBufferCacheHitRatio());
+ stats.getBufferCacheHitRatio(), stats.getBufferCachePageReadCount());
printer.addFooterPrinter(new MetricsPrinter(metrics, HttpUtil.getPreferredCharset(request)));
if (metadata.getJobProfile() != null) {
printer.addFooterPrinter(new ProfilePrinter(metadata.getJobProfile()));
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
index 3c013e7..61591f4 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
@@ -363,10 +363,10 @@
// in case of ASYNC delivery, the status is printed by query translator
responsePrinter.addFooterPrinter(new StatusPrinter(executionState.getResultStatus()));
}
- final ResponseMetrics metrics =
- ResponseMetrics.of(System.nanoTime() - elapsedStart, executionState.duration(), stats.getCount(),
- stats.getSize(), stats.getProcessedObjects(), errorCount, stats.getTotalWarningsCount(),
- stats.getCompileTime(), stats.getQueueWaitTime(), stats.getBufferCacheHitRatio());
+ final ResponseMetrics metrics = ResponseMetrics.of(System.nanoTime() - elapsedStart, executionState.duration(),
+ stats.getCount(), stats.getSize(), stats.getProcessedObjects(), errorCount,
+ stats.getTotalWarningsCount(), stats.getCompileTime(), stats.getQueueWaitTime(),
+ stats.getBufferCacheHitRatio(), stats.getBufferCachePageReadCount());
responsePrinter.addFooterPrinter(new MetricsPrinter(metrics, resultCharset));
if (isPrintingProfile(stats)) {
responsePrinter.addFooterPrinter(new ProfilePrinter(stats.getJobProfile()));
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/JobResultCallback.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/JobResultCallback.java
index 7ac1431..a9a3aac 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/JobResultCallback.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/JobResultCallback.java
@@ -101,6 +101,7 @@
}
metadata.setProcessedObjects(processedObjects);
metadata.setBufferCacheHitRatio(pagesRead > 0 ? (pagesRead - nonPagedReads) / (double) pagesRead : Double.NaN);
+ metadata.setBufferCachePageReadCount(pagesRead);
metadata.setWarnings(AggregateWarnings);
metadata.setTotalWarningsCount(aggregateTotalWarningsCount);
if (run != null && run.getFlags() != null && run.getFlags().contains(JobFlag.PROFILE_RUNTIME)) {
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/ResponseMetrics.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/ResponseMetrics.java
index 5f70937..8db483c 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/ResponseMetrics.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/ResponseMetrics.java
@@ -31,13 +31,14 @@
private long compileTime;
private long queueWaitTime;
private double bufferCacheHitRatio;
+ private long bufferCachePageReadCount;
private ResponseMetrics() {
}
public static ResponseMetrics of(long elapsedTime, long executionTime, long resultCount, long resultSize,
long processedObjects, long errorCount, long warnCount, long compileTime, long queueWaitTime,
- double bufferCacheHitRatio) {
+ double bufferCacheHitRatio, long bufferCachePageReadCount) {
ResponseMetrics metrics = new ResponseMetrics();
metrics.elapsedTime = elapsedTime;
metrics.executionTime = executionTime;
@@ -49,6 +50,7 @@
metrics.compileTime = compileTime;
metrics.queueWaitTime = queueWaitTime;
metrics.bufferCacheHitRatio = bufferCacheHitRatio;
+ metrics.bufferCachePageReadCount = bufferCachePageReadCount;
return metrics;
}
@@ -91,4 +93,8 @@
public double getBufferCacheHitRatio() {
return bufferCacheHitRatio;
}
+
+ public long getBufferCachePageReadCount() {
+ return bufferCachePageReadCount;
+ }
}
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/fields/MetricsPrinter.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/fields/MetricsPrinter.java
index 93fb6d4..76ad2a4 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/fields/MetricsPrinter.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/fields/MetricsPrinter.java
@@ -39,7 +39,8 @@
ERROR_COUNT("errorCount"),
PROCESSED_OBJECTS_COUNT("processedObjects"),
WARNING_COUNT("warningCount"),
- BUFFERCACHE_HIT_RATIO("bufferCacheHitRatio");
+ BUFFERCACHE_HIT_RATIO("bufferCacheHitRatio"),
+ BUFFERCACHE_PAGEREAD_COUNT("bufferCachePageReadCount");
private final String str;
@@ -92,7 +93,11 @@
if (usedCache) {
pw.print("\t");
String pctValue = String.format("%.2f%%", metrics.getBufferCacheHitRatio() * 100);
- ResultUtil.printField(pw, Metrics.BUFFERCACHE_HIT_RATIO.str(), pctValue, hasWarnings || hasErrors);
+ ResultUtil.printField(pw, Metrics.BUFFERCACHE_HIT_RATIO.str(), pctValue, true);
+ pw.print("\n");
+ pw.print("\t");
+ ResultUtil.printField(pw, Metrics.BUFFERCACHE_PAGEREAD_COUNT.str(), metrics.getBufferCachePageReadCount(),
+ hasWarnings || hasErrors);
pw.print("\n");
}
if (hasWarnings) {
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
index f058c41..30c7127 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
@@ -5304,6 +5304,7 @@
stats.setProcessedObjects(resultMetadata.getProcessedObjects());
stats.setQueueWaitTime(resultMetadata.getQueueWaitTimeInNanos());
stats.setBufferCacheHitRatio(resultMetadata.getBufferCacheHitRatio());
+ stats.setBufferCachePageReadCount(resultMetadata.getBufferCachePageReadCount());
if (jobFlags.contains(JobFlag.PROFILE_RUNTIME)) {
stats.setJobProfile(resultMetadata.getJobProfile());
apiFramework.generateOptimizedLogicalPlanWithProfile(resultMetadata.getJobProfile());
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cache-residency/cache-residency.002.regexjson b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cache-residency/cache-residency.002.regexjson
index 8f5cf76..9dcdbb6 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cache-residency/cache-residency.002.regexjson
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cache-residency/cache-residency.002.regexjson
@@ -15,6 +15,7 @@
"resultCount": 1,
"resultSize": 18,
"processedObjects": 17,
- "bufferCacheHitRatio": "100.00%"
+ "bufferCacheHitRatio": "100.00%",
+ "bufferCachePageReadCount": 1
}
}
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/request-param-validation-400-BAD/request-param-validation-400-BAD.01.regexjson b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/request-param-validation-400-BAD/request-param-validation-400-BAD.01.regexjson
index 823515b..ba3c970 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/request-param-validation-400-BAD/request-param-validation-400-BAD.01.regexjson
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/request-param-validation-400-BAD/request-param-validation-400-BAD.01.regexjson
@@ -12,6 +12,7 @@
"resultSize": 0,
"processedObjects": 0,
"bufferCacheHitRatio": "0.00%",
+ "bufferCachePageReadCount": 0,
"errorCount": 1
}
}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.06.regexadm b/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.06.regexadm
index 39fdb09..f168154 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.06.regexadm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.06.regexadm
@@ -18,6 +18,7 @@
\s*\Q"resultSize": \E[0-9]+\Q,\E
\s*\Q"processedObjects": \E[0-9]+\Q,\E
\s*\Q"bufferCacheHitRatio": "\E[^"]+\Q",\E
+\s*\Q"bufferCachePageReadCount": \E[0-9]+\Q,\E
\s*\Q"warningCount": 2\E
\s*\Q}\E
\s*\Q}\E\s*
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.03.regexadm b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.03.regexadm
index fae9453..0717e21 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.03.regexadm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.03.regexadm
@@ -37,6 +37,7 @@
\s*\Q"resultSize": \E[0-9]+\Q,\E
\s*\Q"processedObjects": \E[0-9]+\Q,\E
\s*\Q"bufferCacheHitRatio": "\E[^"]+\Q",\E
+\s*\Q"bufferCachePageReadCount": \E[0-9]+\Q,\E
\s*\Q"warningCount": 12\E
\s*\Q}\E
\s*\Q}\E\s*
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.04.regexadm b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.04.regexadm
index f378c3c..7c0d2e7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.04.regexadm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.04.regexadm
@@ -30,6 +30,7 @@
\s*\Q"resultSize": \E[0-9]+\Q,\E
\s*\Q"processedObjects": \E[0-9]+\Q,\E
\s*\Q"bufferCacheHitRatio": "\E[^"]+\Q",\E
+\s*\Q"bufferCachePageReadCount": \E[0-9]+\Q,\E
\s*\Q"warningCount": 10\E
\s*\Q}\E
\s*\Q}\E\s*
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.05.regexadm b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.05.regexadm
index 932753c..49d65ff 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.05.regexadm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.05.regexadm
@@ -30,6 +30,7 @@
\s*\Q"resultSize": \E[0-9]+\Q,\E
\s*\Q"processedObjects": \E[0-9]+\Q,\E
\s*\Q"bufferCacheHitRatio": "\E[^"]+\Q",\E
+\s*\Q"bufferCachePageReadCount": \E[0-9]+\Q,\E
\s*\Q"warningCount": 11\E
\s*\Q}\E
\s*\Q}\E\s*
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.07.regexadm b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.07.regexadm
index 932753c..49d65ff 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.07.regexadm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.07.regexadm
@@ -30,6 +30,7 @@
\s*\Q"resultSize": \E[0-9]+\Q,\E
\s*\Q"processedObjects": \E[0-9]+\Q,\E
\s*\Q"bufferCacheHitRatio": "\E[^"]+\Q",\E
+\s*\Q"bufferCachePageReadCount": \E[0-9]+\Q,\E
\s*\Q"warningCount": 11\E
\s*\Q}\E
\s*\Q}\E\s*
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.08.regexadm b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.08.regexadm
index fae9453..0717e21 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.08.regexadm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.08.regexadm
@@ -37,6 +37,7 @@
\s*\Q"resultSize": \E[0-9]+\Q,\E
\s*\Q"processedObjects": \E[0-9]+\Q,\E
\s*\Q"bufferCacheHitRatio": "\E[^"]+\Q",\E
+\s*\Q"bufferCachePageReadCount": \E[0-9]+\Q,\E
\s*\Q"warningCount": 12\E
\s*\Q}\E
\s*\Q}\E\s*
\ No newline at end of file