From c78749f5a595d841ace24ebd93b42064a3ca52b5 Mon Sep 17 00:00:00 2001 From: fickludd Date: Wed, 22 May 2019 14:57:19 +0200 Subject: [PATCH] Defer buildling of plan description until retrieve time... As the query collector always collects queries (and therefore builds the plan description), we defer building it until the queries are retrieved, instead of rebuilding it on every query invocation. --- .../java/org/neo4j/internal/collector/QueryCollector.java | 2 +- .../neo4j/internal/collector/TruncatedQuerySnapshot.java | 8 +++++--- .../org/neo4j/internal/collector/QueriesSection.scala | 3 ++- .../java/org/neo4j/kernel/api/query/ExecutingQuery.java | 4 ++-- .../java/org/neo4j/kernel/api/query/QuerySnapshot.java | 5 +++-- 5 files changed, 13 insertions(+), 9 deletions(-) diff --git a/community/data-collector/src/main/java/org/neo4j/internal/collector/QueryCollector.java b/community/data-collector/src/main/java/org/neo4j/internal/collector/QueryCollector.java index 16f96e9e7e605..c1e49d584affb 100644 --- a/community/data-collector/src/main/java/org/neo4j/internal/collector/QueryCollector.java +++ b/community/data-collector/src/main/java/org/neo4j/internal/collector/QueryCollector.java @@ -114,7 +114,7 @@ public void endSuccess( ExecutingQuery query ) QuerySnapshot snapshot = query.snapshot(); queries.produce( new TruncatedQuerySnapshot( snapshot.queryText(), - snapshot.queryPlan(), + snapshot.queryPlanSupplier(), snapshot.queryParameters(), snapshot.elapsedTimeMicros(), snapshot.compilationTimeMicros(), diff --git a/community/data-collector/src/main/java/org/neo4j/internal/collector/TruncatedQuerySnapshot.java b/community/data-collector/src/main/java/org/neo4j/internal/collector/TruncatedQuerySnapshot.java index 7cb0c85795e96..434a0a0e35c60 100644 --- a/community/data-collector/src/main/java/org/neo4j/internal/collector/TruncatedQuerySnapshot.java +++ b/community/data-collector/src/main/java/org/neo4j/internal/collector/TruncatedQuerySnapshot.java @@ -19,6 +19,8 @@ */ package org.neo4j.internal.collector; +import java.util.function.Supplier; + import org.neo4j.graphdb.ExecutionPlanDescription; import org.neo4j.values.AnyValue; import org.neo4j.values.SequenceValue; @@ -51,14 +53,14 @@ class TruncatedQuerySnapshot { final int fullQueryTextHash; final String queryText; - final ExecutionPlanDescription queryPlan; + final Supplier queryPlanSupplier; final MapValue queryParameters; final Long elapsedTimeMicros; final Long compilationTimeMicros; final Long startTimestampMillis; TruncatedQuerySnapshot( String fullQueryText, - ExecutionPlanDescription queryPlan, + Supplier queryPlanSupplier, MapValue queryParameters, Long elapsedTimeMicros, Long compilationTimeMicros, @@ -67,7 +69,7 @@ class TruncatedQuerySnapshot { this.fullQueryTextHash = fullQueryText.hashCode(); this.queryText = truncateQueryText( fullQueryText, maxQueryTextLength ); - this.queryPlan = queryPlan; + this.queryPlanSupplier = queryPlanSupplier; this.queryParameters = truncateParameters( queryParameters ); this.elapsedTimeMicros = elapsedTimeMicros; this.compilationTimeMicros = compilationTimeMicros; diff --git a/community/data-collector/src/main/scala/org/neo4j/internal/collector/QueriesSection.scala b/community/data-collector/src/main/scala/org/neo4j/internal/collector/QueriesSection.scala index 19ada683a3aab..bf5bac9d2e29a 100644 --- a/community/data-collector/src/main/scala/org/neo4j/internal/collector/QueriesSection.scala +++ b/community/data-collector/src/main/scala/org/neo4j/internal/collector/QueriesSection.scala @@ -60,7 +60,8 @@ object QueriesSection { val snapshot = querySnapshots.next() val queryString = snapshot.queryText if (QUERY_FILTER.findFirstMatchIn(queryString).isEmpty) { - val snapshotList = queries.getOrElseUpdate(QueryKey(queryString, snapshot.fullQueryTextHash, snapshot.queryPlan), new QueryData()) + val queryKey = QueryKey(queryString, snapshot.fullQueryTextHash, snapshot.queryPlanSupplier.get()) + val snapshotList = queries.getOrElseUpdate(queryKey, new QueryData()) snapshotList.invocations += SingleInvocation(snapshot.queryParameters, snapshot.elapsedTimeMicros, snapshot.compilationTimeMicros, diff --git a/community/kernel/src/main/java/org/neo4j/kernel/api/query/ExecutingQuery.java b/community/kernel/src/main/java/org/neo4j/kernel/api/query/ExecutingQuery.java index f9f0bc7ad37ce..66437458f6c90 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/api/query/ExecutingQuery.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/api/query/ExecutingQuery.java @@ -252,9 +252,9 @@ public String queryText() return queryText; } - public ExecutionPlanDescription planDescription() + public Supplier planDescriptionSupplier() { - return planDescriptionSupplier.get(); + return planDescriptionSupplier; } public MapValue queryParameters() diff --git a/community/kernel/src/main/java/org/neo4j/kernel/api/query/QuerySnapshot.java b/community/kernel/src/main/java/org/neo4j/kernel/api/query/QuerySnapshot.java index 7a01da48ecc65..98de24950e798 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/api/query/QuerySnapshot.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/api/query/QuerySnapshot.java @@ -22,6 +22,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.function.Supplier; import java.util.stream.Collectors; import org.neo4j.graphdb.ExecutionPlanDescription; @@ -72,9 +73,9 @@ public String queryText() return query.queryText(); } - public ExecutionPlanDescription queryPlan() + public Supplier queryPlanSupplier() { - return query.planDescription(); + return query.planDescriptionSupplier(); } public MapValue queryParameters()