You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2022/10/10 05:05:38 UTC

[doris] branch master updated: [feature](nereids) dump physical tree and memo (#13091)

This is an automated email from the ASF dual-hosted git repository.

morrysnow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 375dfedd83 [feature](nereids) dump physical tree and memo  (#13091)
375dfedd83 is described below

commit 375dfedd8366224b5cd0b2bee5ad5c8f40d521a4
Author: minghong <mi...@163.com>
AuthorDate: Mon Oct 10 13:05:28 2022 +0800

    [feature](nereids) dump physical tree and memo  (#13091)
    
    dump memo info and physical plan in stdout and log
    set `enable_nereids_trace` variable true/false to open/close this dump.
    
    following is a fragment of memo:
    ```
    Group[GroupId#8]
    GroupId#8(plan=PhysicalHashJoin ( type=INNER_JOIN, hashJoinCondition=[(r_regionkey#250 = n_regionkey#255)], otherJoinCondition=Optional.empty, stats=null )) children=[GroupId#6 GroupId#7 ] stats=(rows=25, isReduced=false, width=2)
    GroupId#8(plan=PhysicalHashJoin ( type=INNER_JOIN, hashJoinCondition=[(r_regionkey#250 = n_regionkey#255)], otherJoinCondition=Optional.empty, stats=null )) children=[GroupId#7 GroupId#6 ] stats=(rows=25, isReduced=false, width=2)
    ```
---
 .../java/org/apache/doris/nereids/NereidsPlanner.java   | 12 ++++++++++++
 .../org/apache/doris/nereids/memo/GroupExpression.java  | 10 +++++++++-
 .../main/java/org/apache/doris/nereids/memo/Memo.java   | 13 +++++++++++++
 .../doris/nereids/properties/DistributionSpec.java      |  2 +-
 .../trees/plans/physical/PhysicalDistribute.java        |  2 +-
 .../nereids/trees/plans/physical/PhysicalFilter.java    |  3 ++-
 .../nereids/trees/plans/physical/PhysicalHashJoin.java  |  3 ++-
 .../main/java/org/apache/doris/qe/SessionVariable.java  |  9 +++++++++
 .../org/apache/doris/statistics/StatsDeriveResult.java  | 17 +++++++++++++++++
 9 files changed, 66 insertions(+), 5 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java
index e545c4fb06..ff1ec80890 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java
@@ -40,9 +40,12 @@ import org.apache.doris.planner.PlanFragment;
 import org.apache.doris.planner.Planner;
 import org.apache.doris.planner.RuntimeFilter;
 import org.apache.doris.planner.ScanNode;
+import org.apache.doris.qe.ConnectContext;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.Lists;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -52,6 +55,7 @@ import java.util.stream.Collectors;
  * Planner to do query plan in Nereids.
  */
 public class NereidsPlanner extends Planner {
+    public static final Logger LOG = LogManager.getLogger(NereidsPlanner.class);
 
     private CascadesContext cascadesContext;
     private final StatementContext statementContext;
@@ -72,6 +76,14 @@ public class NereidsPlanner extends Planner {
         PhysicalPlan physicalPlan = plan(logicalPlanAdapter.getLogicalPlan(), PhysicalProperties.ANY);
         PhysicalPlanTranslator physicalPlanTranslator = new PhysicalPlanTranslator();
         PlanTranslatorContext planTranslatorContext = new PlanTranslatorContext(cascadesContext);
+        if (ConnectContext.get().getSessionVariable().isEnableNereidsTrace()) {
+            String tree = physicalPlan.treeString();
+            System.out.println(tree);
+            LOG.info(tree);
+            String memo = cascadesContext.getMemo().toString();
+            System.out.println(memo);
+            LOG.info(memo);
+        }
         PlanFragment root = physicalPlanTranslator.translatePlan(physicalPlan, planTranslatorContext);
 
         scanNodeList = planTranslatorContext.getScanNodes();
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/GroupExpression.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/GroupExpression.java
index 045eb7971a..dddfc29392 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/GroupExpression.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/GroupExpression.java
@@ -227,6 +227,14 @@ public class GroupExpression {
 
     @Override
     public String toString() {
-        return "GroupExpression(plan=" + plan.toString() + ")";
+        StringBuilder builder = new StringBuilder();
+        builder.append(ownerGroup.getGroupId())
+                .append("(plan=" + plan.toString() + ") children=[");
+        for (Group group : children) {
+            builder.append(group.getGroupId()).append(" ");
+        }
+        builder.append("] stats=");
+        builder.append(ownerGroup.getStatistics());
+        return builder.toString();
     }
 }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Memo.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Memo.java
index d28914c041..3ab7601b2d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Memo.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Memo.java
@@ -552,4 +552,17 @@ public class Memo {
             }
         }
     }
+
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append("root:").append(getRoot()).append("\n");
+        for (Group group : groups.values()) {
+            builder.append(group.toString()).append("\n");
+            for (GroupExpression groupExpression : group.getPhysicalExpressions()) {
+                builder.append("  ").append(groupExpression.toString()).append("\n");
+            }
+        }
+        return builder.toString();
+    }
 }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/DistributionSpec.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/DistributionSpec.java
index ab7609f1d7..f748d6e9e1 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/DistributionSpec.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/DistributionSpec.java
@@ -51,7 +51,7 @@ public abstract class DistributionSpec {
 
     @Override
     public String toString() {
-        return this.getClass().toString();
+        return this.getClass().getSimpleName();
     }
 
     @Override
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalDistribute.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalDistribute.java
index 3b32cb4f9e..3163036665 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalDistribute.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalDistribute.java
@@ -63,7 +63,7 @@ public class PhysicalDistribute<CHILD_TYPE extends Plan> extends PhysicalUnary<C
     public String toString() {
         return Utils.toSqlString("PhysicalDistribute",
                 "distributionSpec", distributionSpec,
-                "level", statsDeriveResult.width
+                "stats", statsDeriveResult
         );
     }
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFilter.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFilter.java
index 5eccccfaa1..6d6e01ef16 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFilter.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFilter.java
@@ -67,7 +67,8 @@ public class PhysicalFilter<CHILD_TYPE extends Plan> extends PhysicalUnary<CHILD
     @Override
     public String toString() {
         return Utils.toSqlString("PhysicalFilter",
-                "predicates", predicates
+                "predicates", predicates,
+                "stats", statsDeriveResult
         );
     }
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java
index f45877c268..949d33a11d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java
@@ -91,7 +91,8 @@ public class PhysicalHashJoin<
         return Utils.toSqlString("PhysicalHashJoin",
                 "type", joinType,
                 "hashJoinCondition", hashJoinConjuncts,
-                "otherJoinCondition", otherJoinCondition);
+                "otherJoinCondition", otherJoinCondition,
+                "stats", statsDeriveResult);
     }
 
     @Override
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
index f3e5979f86..3c2ed82131 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
@@ -200,6 +200,7 @@ public class SessionVariable implements Serializable, Writable {
     public static final String ENABLE_NEREIDS_RUNTIME_FILTER = "enable_nereids_runtime_filter";
 
     public static final String NEREIDS_STAR_SCHEMA_SUPPORT = "nereids_star_schema_support";
+    public static final String ENABLE_NEREIDS_TRACE = "enable_nereids_trace";
     public static final String ENABLE_NEREIDS_REORDER_TO_ELIMINATE_CROSS_JOIN =
             "enable_nereids_reorder_to_eliminate_cross_join";
 
@@ -524,6 +525,10 @@ public class SessionVariable implements Serializable, Writable {
 
     @VariableMgr.VarAttr(name = NEREIDS_STAR_SCHEMA_SUPPORT)
     private boolean nereidsStarSchemaSupport = true;
+
+    @VariableMgr.VarAttr(name = ENABLE_NEREIDS_TRACE)
+    private boolean enableNereidsTrace = true;
+
     @VariableMgr.VarAttr(name = ENABLE_NEREIDS_RUNTIME_FILTER)
     private boolean enableNereidsRuntimeFilter = true;
 
@@ -1114,6 +1119,10 @@ public class SessionVariable implements Serializable, Writable {
         return isEnableNereidsPlanner() && nereidsStarSchemaSupport;
     }
 
+    public boolean isEnableNereidsTrace() {
+        return isEnableNereidsPlanner() && enableNereidsTrace;
+    }
+
     public boolean isEnableNereidsRuntimeFilter() {
         return enableNereidsRuntimeFilter;
     }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatsDeriveResult.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatsDeriveResult.java
index 9ce156be6c..6b392d4296 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatsDeriveResult.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatsDeriveResult.java
@@ -146,4 +146,21 @@ public class StatsDeriveResult {
     public StatsDeriveResult copy() {
         return new StatsDeriveResult(this);
     }
+
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append("(rows=").append(rowCount)
+                .append(", isReduced=").append(isReduced)
+                .append(", width=").append(width).append(")");
+        return builder.toString();
+    }
+
+    public static String toString(StatsDeriveResult stats) {
+        if (stats == null) {
+            return "null";
+        } else {
+            return stats.toString();
+        }
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org