This is an automated email from the ASF dual-hosted git repository. kxiao pushed a commit to branch branch-2.0 in repository https://gitbox.apache.org/repos/asf/doris.git
commit d06f625a2a2596352cb18791333fb72d8602dc20 Author: LiBinfeng <[email protected]> AuthorDate: Thu Jul 6 15:36:25 2023 +0800 [feature](profile) Add important time of legacy planner to profile (#20602) Add important time in planning process. Add time points of: // Join reorder end time queryJoinReorderFinishTime means time after analyze and before join reorder // Create single node plan end time queryCreateSingleNodeFinishTime means time after join reorder and before finish create single node plan // Create distribute plan end time queryDistributedFinishTime means time after create single node plan and before finish create distributed node plan --- .../doris/common/profile/SummaryProfile.java | 45 ++++++++++++++++++++++ .../org/apache/doris/planner/OriginalPlanner.java | 7 +++- .../apache/doris/planner/SingleNodePlanner.java | 3 ++ 3 files changed, 54 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/profile/SummaryProfile.java b/fe/fe-core/src/main/java/org/apache/doris/common/profile/SummaryProfile.java index 58788500ae..52887f3ff3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/profile/SummaryProfile.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/profile/SummaryProfile.java @@ -52,6 +52,9 @@ public class SummaryProfile { // Execution Summary public static final String ANALYSIS_TIME = "Analysis Time"; + public static final String JOIN_REORDER_TIME = "JoinReorder Time"; + public static final String CREATE_SINGLE_NODE_TIME = "CreateSingleNode Time"; + public static final String QUERY_DISTRIBUTED_TIME = "QueryDistributed Time"; public static final String PLAN_TIME = "Plan Time"; public static final String SCHEDULE_TIME = "Schedule Time"; public static final String FETCH_RESULT_TIME = "Fetch Result Time"; @@ -72,6 +75,12 @@ public class SummaryProfile { private long queryBeginTime = -1; // Analysis end time private long queryAnalysisFinishTime = -1; + // Join reorder end time + private long queryJoinReorderFinishTime = -1; + // Create single node plan end time + private long queryCreateSingleNodeFinishTime = -1; + // Create distribute plan end time + private long queryDistributedFinishTime = -1; // Plan end time private long queryPlanFinishTime = -1; // Fragment schedule and send end time @@ -114,6 +123,9 @@ public class SummaryProfile { private void updateExecutionSummaryProfile() { executionSummaryProfile.addInfoString(ANALYSIS_TIME, getPrettyQueryAnalysisFinishTime()); + executionSummaryProfile.addInfoString(JOIN_REORDER_TIME, getPrettyQueryJoinReorderFinishTime()); + executionSummaryProfile.addInfoString(CREATE_SINGLE_NODE_TIME, getPrettyCreateSingleNodeFinishTime()); + executionSummaryProfile.addInfoString(QUERY_DISTRIBUTED_TIME, getPrettyQueryDistributedFinishTime()); executionSummaryProfile.addInfoString(PLAN_TIME, getPrettyQueryPlanFinishTime()); executionSummaryProfile.addInfoString(SCHEDULE_TIME, getPrettyQueryScheduleFinishTime()); executionSummaryProfile.addInfoString(FETCH_RESULT_TIME, @@ -131,6 +143,18 @@ public class SummaryProfile { this.queryAnalysisFinishTime = TimeUtils.getStartTimeMs(); } + public void setQueryJoinReorderFinishTime() { + this.queryJoinReorderFinishTime = TimeUtils.getStartTimeMs(); + } + + public void setCreateSingleNodeFinishTime() { + this.queryCreateSingleNodeFinishTime = TimeUtils.getStartTimeMs(); + } + + public void setQueryDistributedFinishTime() { + this.queryDistributedFinishTime = TimeUtils.getStartTimeMs(); + } + public void setQueryPlanFinishTime() { this.queryPlanFinishTime = TimeUtils.getStartTimeMs(); } @@ -259,6 +283,27 @@ public class SummaryProfile { return RuntimeProfile.printCounter(queryAnalysisFinishTime - queryBeginTime, TUnit.TIME_MS); } + private String getPrettyQueryJoinReorderFinishTime() { + if (queryAnalysisFinishTime == -1 || queryJoinReorderFinishTime == -1) { + return "N/A"; + } + return RuntimeProfile.printCounter(queryJoinReorderFinishTime - queryAnalysisFinishTime, TUnit.TIME_MS); + } + + private String getPrettyCreateSingleNodeFinishTime() { + if (queryJoinReorderFinishTime == -1 || queryCreateSingleNodeFinishTime == -1) { + return "N/A"; + } + return RuntimeProfile.printCounter(queryCreateSingleNodeFinishTime - queryJoinReorderFinishTime, TUnit.TIME_MS); + } + + private String getPrettyQueryDistributedFinishTime() { + if (queryCreateSingleNodeFinishTime == -1 || queryDistributedFinishTime == -1) { + return "N/A"; + } + return RuntimeProfile.printCounter(queryDistributedFinishTime - queryCreateSingleNodeFinishTime, TUnit.TIME_MS); + } + private String getPrettyQueryPlanFinishTime() { if (queryAnalysisFinishTime == -1 || queryPlanFinishTime == -1) { return "N/A"; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/OriginalPlanner.java b/fe/fe-core/src/main/java/org/apache/doris/planner/OriginalPlanner.java index 2181734668..d5a3b7e6e6 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/OriginalPlanner.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/OriginalPlanner.java @@ -164,9 +164,11 @@ public class OriginalPlanner extends Planner { plannerContext = new PlannerContext(analyzer, queryStmt, queryOptions, statement); singleNodePlanner = new SingleNodePlanner(plannerContext); PlanNode singleNodePlan = singleNodePlanner.createSingleNodePlan(); + if (ConnectContext.get().getExecutor() != null) { + ConnectContext.get().getExecutor().getSummaryProfile().setCreateSingleNodeFinishTime(); + } ProjectPlanner projectPlanner = new ProjectPlanner(analyzer); projectPlanner.projectSingleNodePlan(queryStmt.getResultExprs(), singleNodePlan); - if (statement instanceof InsertStmt) { InsertStmt insertStmt = (InsertStmt) statement; insertStmt.prepareExpressions(); @@ -220,6 +222,9 @@ public class OriginalPlanner extends Planner { distributedPlanner = new DistributedPlanner(plannerContext); fragments = distributedPlanner.createPlanFragments(singleNodePlan); } + if (ConnectContext.get().getExecutor() != null) { + ConnectContext.get().getExecutor().getSummaryProfile().setQueryDistributedFinishTime(); + } // Push sort node down to the bottom of olapscan. // Because the olapscan must be in the end. So get the last two nodes. diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java b/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java index b9def52802..4bb5ae4309 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java @@ -277,6 +277,9 @@ public class SingleNodePlanner { Preconditions.checkState(stmt instanceof SetOperationStmt); root = createSetOperationPlan((SetOperationStmt) stmt, analyzer, newDefaultOrderByLimit); } + if (ConnectContext.get().getExecutor() != null) { + ConnectContext.get().getExecutor().getSummaryProfile().setQueryJoinReorderFinishTime(); + } // Avoid adding a sort node if the sort tuple has no materialized slots. boolean sortHasMaterializedSlots = false; --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
