From 10e6c4ea60a3c59687687b327f5efb2906a6d2e7 Mon Sep 17 00:00:00 2001 From: Yiding Cui Date: Fri, 28 Oct 2022 15:36:51 +0800 Subject: [PATCH] cherry pick #37078 --- executor/adapter.go | 12 ++++++++++++ sessionctx/variable/sysvar.go | 2 ++ sessionctx/variable/tidb_vars.go | 7 +++++++ 3 files changed, 21 insertions(+) diff --git a/executor/adapter.go b/executor/adapter.go index b8f616e773a72..30143421b4e0f 100644 --- a/executor/adapter.go +++ b/executor/adapter.go @@ -460,6 +460,18 @@ func (a *ExecStmt) Exec(ctx context.Context) (_ sqlexec.RecordSet, err error) { oriStats = strconv.Itoa(variable.DefBuildStatsConcurrency) } oriScan := sctx.GetSessionVars().DistSQLScanConcurrency() + autoConcurrency, err1 := sctx.GetSessionVars().GetSessionOrGlobalSystemVar(variable.TiDBAutoBuildStatsConcurrency) + terror.Log(err1) + if err1 == nil { + terror.Log(sctx.GetSessionVars().SetSystemVar(variable.TiDBBuildStatsConcurrency, autoConcurrency)) + } + sVal, err2 := sctx.GetSessionVars().GetSessionOrGlobalSystemVar(variable.TiDBSysProcScanConcurrency) + terror.Log(err2) + if err2 == nil { + concurrency, err3 := strconv.ParseInt(sVal, 10, 64) + terror.Log(err3) + sctx.GetSessionVars().SetDistSQLScanConcurrency(int(concurrency)) + } oriIndex := sctx.GetSessionVars().IndexSerialScanConcurrency() oriIso, ok := sctx.GetSessionVars().GetSystemVar(variable.TxnIsolation) if !ok { diff --git a/sessionctx/variable/sysvar.go b/sessionctx/variable/sysvar.go index 37fd015fce28f..0e9c2913f978e 100644 --- a/sessionctx/variable/sysvar.go +++ b/sessionctx/variable/sysvar.go @@ -672,6 +672,8 @@ var defaultSysVars = []*SysVar{ TableCacheLease.Store(val) return nil }}, + {Scope: ScopeGlobal, Name: TiDBAutoBuildStatsConcurrency, Value: strconv.Itoa(DefTiDBAutoBuildStatsConcurrency), Type: TypeInt, MinValue: 1, MaxValue: MaxConfigurableConcurrency}, + {Scope: ScopeGlobal, Name: TiDBSysProcScanConcurrency, Value: strconv.Itoa(DefTiDBSysProcScanConcurrency), Type: TypeInt, MinValue: 1, MaxValue: MaxConfigurableConcurrency}, // variable for top SQL feature. // TopSQL enable only be controlled by TopSQL pub/sub sinker. // This global variable only uses to update the global config which store in PD(ETCD). diff --git a/sessionctx/variable/tidb_vars.go b/sessionctx/variable/tidb_vars.go index 06da8d8c53ce8..b0f751d5e7397 100644 --- a/sessionctx/variable/tidb_vars.go +++ b/sessionctx/variable/tidb_vars.go @@ -765,6 +765,11 @@ const ( // ranges would exceed the limit, it chooses less accurate ranges such as full range. 0 indicates that there is no memory // limit for ranges. TiDBOptRangeMaxSize = "tidb_opt_range_max_size" + + // TiDBAutoBuildStatsConcurrency is used to set the build concurrency of auto-analyze. + TiDBAutoBuildStatsConcurrency = "tidb_auto_build_stats_concurrency" + // TiDBSysProcScanConcurrency is used to set the scan concurrency of for backend system processes, like auto-analyze. + TiDBSysProcScanConcurrency = "tidb_sysproc_scan_concurrency" ) // TiDB vars that have only global scope @@ -1072,6 +1077,8 @@ const ( DefTiDBForeignKeyChecks = false DefTiDBOptRangeMaxSize = 0 DefTiDBCostModelVer = 1 + DefTiDBAutoBuildStatsConcurrency = 1 + DefTiDBSysProcScanConcurrency = 1 ) // Process global variables.