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 6dc75f2632f8b0..9d3c83649674e1 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 @@ -72,9 +72,6 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -335,20 +332,14 @@ private PhysicalPlan chooseBestPlan(Group rootGroup, PhysicalProperties physical groupExpression.getOwnerGroup().getStatistics()); return physicalPlan; } catch (Exception e) { - String memo = cascadesContext.getMemo().toString(); - LOG.warn("Failed to choose best plan, memo structure:{}", memo, e); - throw new AnalysisException("Failed to choose best plan", e); + if (e instanceof AnalysisException && e.getMessage().contains("Failed to choose best plan")) { + throw e; + } + LOG.warn("Failed to choose best plan, memo structure:{}", cascadesContext.getMemo(), e); + throw new AnalysisException("Failed to choose best plan: " + e.getMessage(), e); } } - private ScheduledExecutorService runTimeoutExecutor() { - ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); - Runnable task = () -> cascadesContext.setIsTimeout(true); - executor.schedule(task, 5, TimeUnit.SECONDS); - - return executor; - } - /** * getting hints explain string, which specified by enumerate and show in lists * @param hintMap hint map recorded in statement context diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Group.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Group.java index 4b227da3c5a8d9..750de4fa8f2062 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Group.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Group.java @@ -438,7 +438,7 @@ public String toString() { for (GroupExpression physicalExpression : physicalExpressions) { str.append(" ").append(physicalExpression).append("\n"); } - str.append(" enforcers:\n"); + str.append(" enforcers:\n"); for (GroupExpression enforcer : enforcers) { str.append(" ").append(enforcer).append("\n"); } @@ -446,6 +446,21 @@ public String toString() { str.append(" chosen expression id: ").append(chosenGroupExpressionId).append("\n"); str.append(" chosen properties: ").append(chosenProperties).append("\n"); } + str.append(" stats").append("\n"); + str.append(getStatistics() == null ? "" : getStatistics().detail(" ")); + str.append(" lowest Plan(cost, properties, plan, childrenRequires)"); + getAllProperties().forEach( + prop -> { + Optional> costAndGroupExpression = getLowestCostPlan(prop); + if (costAndGroupExpression.isPresent()) { + Cost cost = costAndGroupExpression.get().first; + GroupExpression child = costAndGroupExpression.get().second; + str.append("\n\n ").append(cost.getValue()).append(" ").append(prop) + .append("\n ").append(child).append("\n ") + .append(child.getInputPropertiesListOrEmpty(prop)); + } + } + ); return str.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 4204f33ca1591b..d3a5d8a4889983 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 @@ -779,23 +779,7 @@ public String toString() { StringBuilder builder = new StringBuilder(); builder.append("root:").append(getRoot()).append("\n"); for (Group group : groups.values()) { - builder.append("\n\n").append(group); - builder.append(" stats").append("\n"); - builder.append(group.getStatistics().detail(" ")); - builder.append(" lowest Plan(cost, properties, plan, childrenRequires)"); - group.getAllProperties().forEach( - prop -> { - Optional> costAndGroupExpression = group.getLowestCostPlan(prop); - if (costAndGroupExpression.isPresent()) { - Cost cost = costAndGroupExpression.get().first; - GroupExpression child = costAndGroupExpression.get().second; - builder.append("\n\n " + cost.getValue() + " " + prop) - .append("\n ").append(child) - .append("\n " + child.getInputPropertiesListOrEmpty(prop)); - } - } - ); - builder.append("\n"); + builder.append("\n\n").append(group).append("\n"); } return builder.toString(); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/EnforceMissingPropertiesHelper.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/EnforceMissingPropertiesHelper.java index 1c45db6d4c483e..d548e3254c47d8 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/EnforceMissingPropertiesHelper.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/EnforceMissingPropertiesHelper.java @@ -87,7 +87,7 @@ private PhysicalProperties enforceDistributionButMeetSort(PhysicalProperties out groupExpression.getOwnerGroup() .replaceBestPlanProperty( output, PhysicalProperties.ANY, groupExpression.getCostValueByProperties(output)); - return enforceSortAndDistribution(output, request); + return enforceSortAndDistribution(PhysicalProperties.ANY, request); } private PhysicalProperties enforceGlobalSort(PhysicalProperties oldOutputProperty, PhysicalProperties required) {