From 8ea2ed03e7e5436725416354f9ea69db0a537ef8 Mon Sep 17 00:00:00 2001 From: Maxwell Date: Sat, 9 May 2020 08:41:05 +0800 Subject: [PATCH] session: Move `OptimizerUseInvisibleIndexes` from `SmtmCtx` to `SessionVars` (#17040) --- executor/executor.go | 1 - planner/core/planbuilder.go | 2 +- session/session.go | 12 ++++++------ sessionctx/stmtctx/stmtctx.go | 2 -- sessionctx/variable/session.go | 3 +++ util/admin/admin.go | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/executor/executor.go b/executor/executor.go index 9a0525d9de..aae37f1feb 100644 --- a/executor/executor.go +++ b/executor/executor.go @@ -1714,7 +1714,6 @@ func ResetContextOfStmt(ctx sessionctx.Context, s ast.StmtNode) (err error) { errCount, warnCount := vars.StmtCtx.NumErrorWarnings() vars.SysErrorCount = errCount vars.SysWarningCount = warnCount - sc.OptimizerUseInvisibleIndexes = vars.StmtCtx.OptimizerUseInvisibleIndexes vars.StmtCtx = sc vars.PrevFoundInPlanCache = vars.FoundInPlanCache vars.FoundInPlanCache = false diff --git a/planner/core/planbuilder.go b/planner/core/planbuilder.go index 7edc6a49bd..4cc682e664 100644 --- a/planner/core/planbuilder.go +++ b/planner/core/planbuilder.go @@ -723,7 +723,7 @@ func (b *PlanBuilder) getPossibleAccessPaths(indexHints []*ast.IndexHint, tbl ta if tblInfo.TiFlashReplica != nil && tblInfo.TiFlashReplica.Available { publicPaths = append(publicPaths, &util.AccessPath{IsTablePath: true, StoreType: kv.TiFlash}) } - optimizerUseInvisibleIndexes := b.ctx.GetSessionVars().StmtCtx.OptimizerUseInvisibleIndexes + optimizerUseInvisibleIndexes := b.ctx.GetSessionVars().OptimizerUseInvisibleIndexes for _, index := range tblInfo.Indices { if index.State == model.StatePublic { // Filter out invisible index, because they are not visible for optimizer diff --git a/session/session.go b/session/session.go index ea676556c1..d3e9c3b557 100644 --- a/session/session.go +++ b/session/session.go @@ -762,9 +762,9 @@ func (s *session) ExecRestrictedSQLWithContext(ctx context.Context, sql string) se.sessionVars.InspectionTableCache = cache defer func() { se.sessionVars.InspectionTableCache = nil }() } - if ok := s.sessionVars.StmtCtx.OptimizerUseInvisibleIndexes; ok { - se.sessionVars.StmtCtx.OptimizerUseInvisibleIndexes = true - defer func() { se.sessionVars.StmtCtx.OptimizerUseInvisibleIndexes = false }() + if ok := s.sessionVars.OptimizerUseInvisibleIndexes; ok { + se.sessionVars.OptimizerUseInvisibleIndexes = true + defer func() { se.sessionVars.OptimizerUseInvisibleIndexes = false }() } defer func() { if se != nil && se.GetSessionVars().StmtCtx.WarningCount() > 0 { @@ -826,9 +826,9 @@ func (s *session) ExecRestrictedSQLWithSnapshot(sql string) ([]chunk.Row, []*ast se.sessionVars.SnapshotInfoschema = nil }() } - if ok := s.sessionVars.StmtCtx.OptimizerUseInvisibleIndexes; ok { - se.sessionVars.StmtCtx.OptimizerUseInvisibleIndexes = true - defer func() { se.sessionVars.StmtCtx.OptimizerUseInvisibleIndexes = false }() + if ok := s.sessionVars.OptimizerUseInvisibleIndexes; ok { + se.sessionVars.OptimizerUseInvisibleIndexes = true + defer func() { se.sessionVars.OptimizerUseInvisibleIndexes = false }() } return execRestrictedSQL(ctx, se, sql) } diff --git a/sessionctx/stmtctx/stmtctx.go b/sessionctx/stmtctx/stmtctx.go index 5716e04214..98879a6401 100644 --- a/sessionctx/stmtctx/stmtctx.go +++ b/sessionctx/stmtctx/stmtctx.go @@ -71,8 +71,6 @@ type StatementContext struct { BatchCheck bool InNullRejectCheck bool AllowInvalidDate bool - // OptimizerUseInvisibleIndexes indicates whether optimizer can use invisible index - OptimizerUseInvisibleIndexes bool // mu struct holds variables that change during execution. mu struct { diff --git a/sessionctx/variable/session.go b/sessionctx/variable/session.go index 32a7011735..f5089da1be 100644 --- a/sessionctx/variable/session.go +++ b/sessionctx/variable/session.go @@ -599,6 +599,9 @@ type SessionVars struct { FoundInPlanCache bool // PrevFoundInPlanCache indicates whether the last statement was found in plan cache. PrevFoundInPlanCache bool + + // OptimizerUseInvisibleIndexes indicates whether optimizer can use invisible index + OptimizerUseInvisibleIndexes bool } // PreparedParams contains the parameters of the current prepared statement when executing it. diff --git a/util/admin/admin.go b/util/admin/admin.go index 42d3a71d9b..3931a56a5b 100644 --- a/util/admin/admin.go +++ b/util/admin/admin.go @@ -310,7 +310,7 @@ const ( // otherwise it returns an error and the corresponding index's offset. func CheckIndicesCount(ctx sessionctx.Context, dbName, tableName string, indices []string) (byte, int, error) { // Here we need check all indexes, includes invisible index - ctx.GetSessionVars().StmtCtx.OptimizerUseInvisibleIndexes = true + ctx.GetSessionVars().OptimizerUseInvisibleIndexes = true // Add `` for some names like `table name`. sql := fmt.Sprintf("SELECT COUNT(*) FROM `%s`.`%s` USE INDEX()", dbName, tableName) tblCnt, err := getCount(ctx, sql)