Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 12 additions & 11 deletions presto-main/src/main/java/com/facebook/presto/sql/Optimizer.java
Original file line number Diff line number Diff line change
Expand Up @@ -117,11 +117,7 @@ public Plan validateAndOptimizePlan(PlanNode root, PlanStage stage)
PlanOptimizerResult optimizerResult = optimizer.optimize(root, session, TypeProvider.viewOf(variableAllocator.getVariables()), variableAllocator, idAllocator, warningCollector);
requireNonNull(optimizerResult, format("%s returned a null plan", optimizer.getClass().getName()));
if (enableVerboseRuntimeStats || trackOptimizerRuntime(session, optimizer)) {
String optimizerName = optimizer.getClass().getSimpleName();
if (optimizer instanceof StatsRecordingPlanOptimizer) {
optimizerName = format("%s:%s", optimizerName, ((StatsRecordingPlanOptimizer) optimizer).getDelegate().getClass().getSimpleName());
}
session.getRuntimeStats().addMetricValue(String.format("optimizer%sTimeNanos", optimizerName), NANO, System.nanoTime() - start);
session.getRuntimeStats().addMetricValue(String.format("optimizer%sTimeNanos", getOptimizerNameForLog(optimizer)), NANO, System.nanoTime() - start);
}
TypeProvider types = TypeProvider.viewOf(variableAllocator.getVariables());

Expand All @@ -146,11 +142,7 @@ private boolean trackOptimizerRuntime(Session session, PlanOptimizer optimizer)
return false;
}
List<String> optimizers = Splitter.on(",").trimResults().splitToList(optimizerString);
String optimizerName = optimizer.getClass().getSimpleName();
if (optimizer instanceof StatsRecordingPlanOptimizer) {
optimizerName = ((StatsRecordingPlanOptimizer) optimizer).getDelegate().getClass().getSimpleName();
}
return optimizers.contains(optimizerName);
return optimizers.contains(getOptimizerNameForLog(optimizer));
}

private StatsAndCosts computeStats(PlanNode root, TypeProvider types)
Expand All @@ -172,7 +164,7 @@ private void collectOptimizerInformation(PlanOptimizer optimizer, PlanNode oldNo
return;
}

String optimizerName = optimizer.getClass().getSimpleName();
String optimizerName = getOptimizerNameForLog(optimizer);
boolean isTriggered = planOptimizerResult.isOptimizerTriggered();
boolean isApplicable =
isTriggered ||
Expand All @@ -192,4 +184,13 @@ private void collectOptimizerInformation(PlanOptimizer optimizer, PlanNode oldNo
session.getOptimizerResultCollector().addOptimizerResult(optimizerName, oldNodeStr, newNodeStr);
}
}

private String getOptimizerNameForLog(PlanOptimizer optimizer)
{
String optimizerName = optimizer.getClass().getSimpleName();
if (optimizer instanceof StatsRecordingPlanOptimizer) {
optimizerName = format("%s:%s", optimizerName, ((StatsRecordingPlanOptimizer) optimizer).getDelegate().getClass().getSimpleName());
}
return optimizerName;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import com.facebook.presto.sql.planner.PlannerUtils;
import com.facebook.presto.sql.planner.RuleStatsRecorder;
import com.facebook.presto.sql.planner.TypeProvider;
import com.facebook.presto.sql.planner.iterative.rule.RowExpressionRewriteRuleSet;
import com.facebook.presto.sql.planner.optimizations.PlanOptimizer;
import com.facebook.presto.sql.planner.optimizations.PlanOptimizerResult;
import com.google.common.base.Splitter;
Expand Down Expand Up @@ -179,7 +180,7 @@ private boolean exploreNode(int group, Context context, Matcher matcher)

if (!rule.isEnabled(context.session)) {
if (isVerboseOptimizerInfoEnabled(context.session) && isApplicable(node, rule, matcher, context)) {
context.addRulesApplicable(rule.getClass().getSimpleName());
context.addRulesApplicable(getNameOfOptimizerRule(rule));
}
continue;
}
Expand All @@ -198,7 +199,7 @@ private boolean exploreNode(int group, Context context, Matcher matcher)
transformedNode = transformedNode.assignStatsEquivalentPlanNode(node.getStatsEquivalentPlanNode());
}
}
context.addRulesTriggered(rule.getClass().getSimpleName(), node, transformedNode, rule.isCostBased(context.session), rule.getStatsSource());
context.addRulesTriggered(getNameOfOptimizerRule(rule), node, transformedNode, rule.isCostBased(context.session), rule.getStatsSource());
node = context.memo.replace(group, transformedNode, rule.getClass().getName());

done = false;
Expand All @@ -210,6 +211,15 @@ private boolean exploreNode(int group, Context context, Matcher matcher)
return progress;
}

private String getNameOfOptimizerRule(Rule<?> rule)
{
String ruleName = rule.getClass().getSimpleName();
if (rule instanceof RowExpressionRewriteRuleSet.RowExpressionRewriteRule) {
ruleName = ((RowExpressionRewriteRuleSet.RowExpressionRewriteRule) rule).getOptimizerNameForLog();
}
return ruleName;
}

private <T> Rule.Result transform(PlanNode node, Rule<T> rule, Matcher matcher, Context context)
{
Rule.Result result;
Expand All @@ -232,7 +242,7 @@ private <T> Rule.Result transform(PlanNode node, Rule<T> rule, Matcher matcher,
}
stats.record(rule, duration, !result.isEmpty());
if (SystemSessionProperties.isVerboseRuntimeStatsEnabled(context.session) || trackOptimizerRuntime(context.session, rule)) {
context.session.getRuntimeStats().addMetricValue(String.format("rule%sTimeNanos", rule.getClass().getSimpleName()), NANO, duration);
context.session.getRuntimeStats().addMetricValue(String.format("rule%sTimeNanos", getNameOfOptimizerRule(rule)), NANO, duration);
}

return result;
Expand All @@ -245,7 +255,7 @@ private boolean trackOptimizerRuntime(Session session, Rule rule)
return false;
}
List<String> optimizers = Splitter.on(",").trimResults().splitToList(optimizerString);
return optimizers.contains(rule.getClass().getSimpleName());
return optimizers.contains(getNameOfOptimizerRule(rule));
}

private <T> boolean isApplicable(PlanNode node, Rule<T> rule, Matcher matcher, Context context)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkState;
import static com.google.common.collect.ImmutableMap.builder;
import static java.lang.String.format;
import static java.util.Objects.requireNonNull;

public class RowExpressionRewriteRuleSet
Expand Down Expand Up @@ -141,8 +142,18 @@ public Rule<AggregationNode> aggregationRowExpressionRewriteRule()
return new AggregationRowExpressionRewrite();
}

public abstract class RowExpressionRewriteRule<T>
implements Rule<T>
{
public String getOptimizerNameForLog()
{
String rewriterName = rewriter.getClass().getName();
return format("%s:%s", rewriterName.substring(rewriterName.lastIndexOf('.') + 1), this.getClass().getSimpleName());
}
}

private final class ProjectRowExpressionRewrite
implements Rule<ProjectNode>
extends RowExpressionRewriteRule<ProjectNode>
{
@Override
public boolean isEnabled(Session session)
Expand Down Expand Up @@ -177,7 +188,7 @@ public Result apply(ProjectNode projectNode, Captures captures, Context context)
}

private final class SpatialJoinRowExpressionRewrite
implements Rule<SpatialJoinNode>
extends RowExpressionRewriteRule<SpatialJoinNode>
{
@Override
public boolean isEnabled(Session session)
Expand Down Expand Up @@ -215,7 +226,7 @@ public Result apply(SpatialJoinNode spatialJoinNode, Captures captures, Context
}

private final class JoinRowExpressionRewrite
implements Rule<JoinNode>
extends RowExpressionRewriteRule<JoinNode>
{
@Override
public boolean isEnabled(Session session)
Expand Down Expand Up @@ -259,7 +270,7 @@ public Result apply(JoinNode joinNode, Captures captures, Context context)
}

private final class WindowRowExpressionRewrite
implements Rule<WindowNode>
extends RowExpressionRewriteRule<WindowNode>
{
@Override
public boolean isEnabled(Session session)
Expand Down Expand Up @@ -316,7 +327,7 @@ public Result apply(WindowNode windowNode, Captures captures, Context context)
}

private final class ApplyRowExpressionRewrite
implements Rule<ApplyNode>
extends RowExpressionRewriteRule<ApplyNode>
{
@Override
public boolean isEnabled(Session session)
Expand Down Expand Up @@ -366,7 +377,7 @@ private Optional<Assignments> translateAssignments(Assignments assignments, Rule
}

private final class FilterRowExpressionRewrite
implements Rule<FilterNode>
extends RowExpressionRewriteRule<FilterNode>
{
@Override
public boolean isEnabled(Session session)
Expand Down Expand Up @@ -394,7 +405,7 @@ public Result apply(FilterNode filterNode, Captures captures, Context context)
}

private final class ValuesRowExpressionRewrite
implements Rule<ValuesNode>
extends RowExpressionRewriteRule<ValuesNode>
{
@Override
public boolean isEnabled(Session session)
Expand Down Expand Up @@ -432,7 +443,7 @@ public Result apply(ValuesNode valuesNode, Captures captures, Context context)
}

private final class AggregationRowExpressionRewrite
implements Rule<AggregationNode>
extends RowExpressionRewriteRule<AggregationNode>
{
@Override
public boolean isEnabled(Session session)
Expand Down Expand Up @@ -480,7 +491,7 @@ public Result apply(AggregationNode node, Captures captures, Context context)
}

private final class TableFinishRowExpressionRewrite
implements Rule<TableFinishNode>
extends RowExpressionRewriteRule<TableFinishNode>
{
@Override
public boolean isEnabled(Session session)
Expand Down Expand Up @@ -537,7 +548,7 @@ private Optional<StatisticAggregations> translateStatisticAggregation(StatisticA
}

private final class TableWriterRowExpressionRewrite
implements Rule<TableWriterNode>
extends RowExpressionRewriteRule<TableWriterNode>
{
@Override
public boolean isEnabled(Session session)
Expand Down