diff --git a/pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/MultiStageBrokerRequestHandler.java b/pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/MultiStageBrokerRequestHandler.java index 01e4884d6a08..01bfe456b5b1 100644 --- a/pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/MultiStageBrokerRequestHandler.java +++ b/pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/MultiStageBrokerRequestHandler.java @@ -170,6 +170,12 @@ protected BrokerResponse handleRequest(long requestId, String query, @Nullable S DispatchableSubPlan dispatchableSubPlan = queryPlanResult.getQueryPlan(); Set tableNames = queryPlanResult.getTableNames(); + + _brokerMetrics.addMeteredGlobalValue(BrokerMeter.MULTI_STAGE_QUERIES_GLOBAL, 1); + for (String tableName : tableNames) { + _brokerMetrics.addMeteredTableValue(tableName, BrokerMeter.MULTI_STAGE_QUERIES, 1); + } + requestContext.setTableNames(List.copyOf(tableNames)); // Compilation Time. This includes the time taken for parsing, compiling, create stage plans and assigning workers. diff --git a/pinot-common/src/main/java/org/apache/pinot/common/metrics/BrokerMeter.java b/pinot-common/src/main/java/org/apache/pinot/common/metrics/BrokerMeter.java index bb76591ab003..006ee458ebb6 100644 --- a/pinot-common/src/main/java/org/apache/pinot/common/metrics/BrokerMeter.java +++ b/pinot-common/src/main/java/org/apache/pinot/common/metrics/BrokerMeter.java @@ -29,7 +29,26 @@ public enum BrokerMeter implements AbstractMetrics.Meter { UNCAUGHT_POST_EXCEPTIONS("exceptions", true), HEALTHCHECK_BAD_CALLS("healthcheck", true), HEALTHCHECK_OK_CALLS("healthcheck", true), + /** + * Number of queries executed. + *

+ * At this moment this counter does not include queries executed in multi-stage mode. + */ QUERIES("queries", false), + /** + * Number of multi-stage queries that have been started. + *

+ * Unlike {@link #MULTI_STAGE_QUERIES}, this metric is global and not attached to a particular table. + * That means it can be used to know how many multi-stage queries have been started in total. + */ + MULTI_STAGE_QUERIES_GLOBAL("queries", true), + /** + * Number of multi-stage queries that have been started touched a given table. + *

+ * In case the query touch multiple tables (ie using joins)1, this metric will be incremented for each table, so the + * sum of this metric across all tables should be greater or equal than {@link #MULTI_STAGE_QUERIES_GLOBAL}. + */ + MULTI_STAGE_QUERIES("queries", false), // These metrics track the exceptions caught during query execution in broker side. // Query rejected by Jersey thread pool executor