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]

Reply via email to