diff --git a/pkg/sql/plan.go b/pkg/sql/plan.go index 1ec9d5e6d02d..2a350c3abf4d 100644 --- a/pkg/sql/plan.go +++ b/pkg/sql/plan.go @@ -294,6 +294,8 @@ func (p *planner) makePlan(ctx context.Context, stmt Statement) error { // Reinitialize. p.curPlan = planTop{AST: stmt.AST} + log.VEvent(ctx, 1, "heuristic planner starts") + var err error p.curPlan.plan, err = p.newPlan(ctx, stmt.AST, nil /*desiredTypes*/) if err != nil { @@ -321,6 +323,8 @@ func (p *planner) makePlan(ctx context.Context, stmt Statement) error { return err } + log.VEvent(ctx, 1, "heuristic planner optimizes plan") + needed := allColumns(p.curPlan.plan) p.curPlan.plan, err = p.optimizePlan(ctx, p.curPlan.plan, needed) if err != nil { @@ -328,6 +332,8 @@ func (p *planner) makePlan(ctx context.Context, stmt Statement) error { return err } + log.VEvent(ctx, 1, "heuristic planner optimizes subqueries") + // Now do the same work for all sub-queries. for i := range p.curPlan.subqueryPlans { if err := p.optimizeSubquery(ctx, &p.curPlan.subqueryPlans[i]); err != nil { diff --git a/pkg/sql/planner.go b/pkg/sql/planner.go index e1057fd9879e..d5ef424170fb 100644 --- a/pkg/sql/planner.go +++ b/pkg/sql/planner.go @@ -542,20 +542,27 @@ func (p *planner) optionallyUseOptimizer( ctx context.Context, sd sessiondata.SessionData, stmt Statement, ) (bool, error) { if sd.OptimizerMode == sessiondata.OptimizerOff { + log.VEvent(ctx, 1, "optimizer disabled") return false, nil } // TODO(radu): for now, the experimental force lookup join flag does not work // with the optimizer. Turn the optimizer off for the query so the flag can // still function. if sd.OptimizerMode != sessiondata.OptimizerAlways && sd.LookupJoinEnabled { + log.VEvent(ctx, 1, "lookup join requested; not using optimizer") return false, nil } + log.VEvent(ctx, 1, "generating optimizer plan") + err := p.makeOptimizerPlan(ctx, stmt) if err == nil { + log.VEvent(ctx, 1, "optimizer plan succeeded") return true, nil } + log.VEventf(ctx, 1, "optimizer plan failed: %v", err) if canFallbackFromOpt(err, sd.OptimizerMode, stmt) { + log.VEvent(ctx, 1, "optimizer falls back on heuristic planner") return false, nil } return false, err