From 121cbcba2ceda7f06cbcffcd5c6e9cbbef471115 Mon Sep 17 00:00:00 2001 From: Weizhen Wang Date: Thu, 29 May 2025 20:46:10 +0800 Subject: [PATCH] planner: improve OptimizationFlags to avoid internal sql's syncload (#61401) --- pkg/planner/core/optimizer.go | 6 ++++-- pkg/planner/core/rule_collect_plan_stats.go | 9 +++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/pkg/planner/core/optimizer.go b/pkg/planner/core/optimizer.go index a177947d5a..bb1380b815 100644 --- a/pkg/planner/core/optimizer.go +++ b/pkg/planner/core/optimizer.go @@ -382,8 +382,10 @@ func adjustOptimizationFlags(flag uint64, logic base.LogicalPlan) uint64 { // When we use the straight Join Order hint, we should disable the join reorder optimization. flag &= ^rule.FlagJoinReOrder } - flag |= rule.FlagCollectPredicateColumnsPoint - flag |= rule.FlagSyncWaitStatsLoadPoint + if !logic.SCtx().GetSessionVars().InRestrictedSQL { + flag |= rule.FlagCollectPredicateColumnsPoint + flag |= rule.FlagSyncWaitStatsLoadPoint + } if !logic.SCtx().GetSessionVars().StmtCtx.UseDynamicPruneMode { flag |= rule.FlagPartitionProcessor // apply partition pruning under static mode } diff --git a/pkg/planner/core/rule_collect_plan_stats.go b/pkg/planner/core/rule_collect_plan_stats.go index 53d48740ab..0c6cdc2c1e 100644 --- a/pkg/planner/core/rule_collect_plan_stats.go +++ b/pkg/planner/core/rule_collect_plan_stats.go @@ -29,6 +29,7 @@ import ( "github.com/pingcap/tidb/pkg/sessionctx/vardef" "github.com/pingcap/tidb/pkg/statistics" "github.com/pingcap/tidb/pkg/statistics/asyncload" + "github.com/pingcap/tidb/pkg/util/intest" "github.com/pingcap/tidb/pkg/util/intset" "github.com/pingcap/tidb/pkg/util/logutil" "go.uber.org/zap" @@ -40,9 +41,7 @@ type CollectPredicateColumnsPoint struct{} // Optimize implements LogicalOptRule.<0th> interface. func (c *CollectPredicateColumnsPoint) Optimize(_ context.Context, plan base.LogicalPlan, _ *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false - if plan.SCtx().GetSessionVars().InRestrictedSQL { - return plan, planChanged, nil - } + intest.Assert(!plan.SCtx().GetSessionVars().InRestrictedSQL, "CollectPredicateColumnsPoint should not be called in restricted SQL mode") syncWait := plan.SCtx().GetSessionVars().StatsLoadSyncWait.Load() syncLoadEnabled := syncWait > 0 predicateColumns, visitedPhysTblIDs, tid2pids, opNum := CollectColumnStatsUsage(plan) @@ -225,9 +224,7 @@ type SyncWaitStatsLoadPoint struct{} // Optimize implements the base.LogicalOptRule.<0th> interface. func (SyncWaitStatsLoadPoint) Optimize(_ context.Context, plan base.LogicalPlan, _ *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false - if plan.SCtx().GetSessionVars().InRestrictedSQL { - return plan, planChanged, nil - } + intest.Assert(!plan.SCtx().GetSessionVars().InRestrictedSQL, "SyncWaitStatsLoadPoint should not be called in restricted SQL mode") if plan.SCtx().GetSessionVars().StmtCtx.IsSyncStatsFailed { return plan, planChanged, nil }