From 7d27bebeabe742bc7f3bccebb3d5fdf6bad78a77 Mon Sep 17 00:00:00 2001 From: guo-shaoge Date: Sun, 12 Dec 2021 03:03:40 +0800 Subject: [PATCH 1/8] sessionctx: enable IndexMerge by default Signed-off-by: guo-shaoge --- session/bootstrap.go | 27 ++++++- session/bootstrap_serial_test.go | 115 +++++++++++++++++++++++++++++ sessionctx/variable/session.go | 2 +- sessionctx/variable/sysvar.go | 2 +- sessionctx/variable/sysvar_test.go | 9 +++ sessionctx/variable/tidb_vars.go | 1 + 6 files changed, 153 insertions(+), 3 deletions(-) diff --git a/session/bootstrap.go b/session/bootstrap.go index 573c17bdaaf2e..44a24495f169e 100644 --- a/session/bootstrap.go +++ b/session/bootstrap.go @@ -528,11 +528,14 @@ const ( version77 = 77 // version78 updates mysql.stats_buckets.lower_bound, mysql.stats_buckets.upper_bound and mysql.stats_histograms.last_analyze_pos from BLOB to LONGBLOB. version78 = 78 + // version79 insert "tidb_enable_index_merge|off" to mysql.GLOBAL_VARIABLES if there is no tidb_enable_index_merge. + // This will only happens when we upgrade a cluster before 4.0.0 to 4.0.0+. + version79 = 79 ) // currentBootstrapVersion is defined as a variable, so we can modify its value for testing. // please make sure this is the largest version -var currentBootstrapVersion int64 = version78 +var currentBootstrapVersion int64 = version79 var ( bootstrapVersion = []func(Session, int64){ @@ -614,6 +617,7 @@ var ( upgradeToVer76, upgradeToVer77, upgradeToVer78, + upgradeToVer79, } ) @@ -1612,6 +1616,27 @@ func upgradeToVer78(s Session, ver int64) { doReentrantDDL(s, "ALTER TABLE mysql.stats_histograms MODIFY last_analyze_pos LONGBLOB DEFAULT NULL") } +func upgradeToVer79(s Session, ver int64) { + if ver >= version79 { + return + } + // Check if tidb_enable_index_merge exists in mysql.GLOBAL_VARIABLES. + // If not, insert "tidb_enable_index_merge | off". + ctx := context.Background() + rs, err := s.ExecuteInternal(ctx, "SELECT VARIABLE_VALUE FROM %n.%n WHERE VARIABLE_NAME=%?;", + mysql.SystemDB, mysql.GlobalVariablesTable, variable.TiDBEnableIndexMerge) + terror.MustNil(err) + req := rs.NewChunk(nil) + err = rs.Next(ctx, req) + terror.MustNil(err) + if req.NumRows() != 0 { + return + } + + mustExecute(s, "INSERT HIGH_PRIORITY IGNORE INTO %n.%n VALUES (%?, %?);", mysql.SystemDB, mysql.GlobalVariablesTable, variable.TiDBEnableIndexMerge, variable.Off) + terror.MustNil(err) +} + func writeOOMAction(s Session) { comment := "oom-action is `log` by default in v3.0.x, `cancel` by default in v4.0.11+" mustExecute(s, `INSERT HIGH_PRIORITY INTO %n.%n VALUES (%?, %?, %?) ON DUPLICATE KEY UPDATE VARIABLE_VALUE= %?`, diff --git a/session/bootstrap_serial_test.go b/session/bootstrap_serial_test.go index 235cf9556ace2..ef98ae596318e 100644 --- a/session/bootstrap_serial_test.go +++ b/session/bootstrap_serial_test.go @@ -879,3 +879,118 @@ func TestReferencesPrivilegeOnColumn(t *testing.T) { mustExec(t, se, "create table t1 (a int)") mustExec(t, se, "GRANT select (a), update (a),insert(a), references(a) on t1 to issue28531") } + +func TestIndexMergeUpgradeFrom300To500(t *testing.T) { + ctx := context.Background() + store, _ := createStoreAndBootstrap(t) + defer func() { require.NoError(t, store.Close()) }() + + // Upgrade from 3.0.0 to 5.4+. + ver300 := 33 + seV3 := createSessionAndSetID(t, store) + txn, err := store.Begin() + require.NoError(t, err) + m := meta.NewMeta(txn) + err = m.FinishBootstrap(int64(ver300)) + require.NoError(t, err) + err = txn.Commit(context.Background()) + require.NoError(t, err) + mustExec(t, seV3, fmt.Sprintf("update mysql.tidb set variable_value=%d where variable_name='tidb_server_version'", ver300)) + mustExec(t, seV3, fmt.Sprintf("delete from mysql.GLOBAL_VARIABLES where variable_name='%s'", variable.TiDBEnableIndexMerge)) + mustExec(t, seV3, "commit") + unsetStoreBootstrapped(store.UUID()) + ver, err := getBootstrapVersion(seV3) + require.NoError(t, err) + require.Equal(t, int64(ver300), ver) + + // We are now in 3.0.0, check tidb_enable_index_merge shoudle not exist. + res := mustExec(t, seV3, fmt.Sprintf("select * from mysql.GLOBAL_VARIABLES where variable_name='%s'", variable.TiDBEnableIndexMerge)) + chk := res.NewChunk(nil) + err = res.Next(ctx, chk) + require.NoError(t, err) + require.Equal(t, 0, chk.NumRows()) + + domCurVer, err := BootstrapSession(store) + require.NoError(t, err) + defer domCurVer.Close() + seCurVer := createSessionAndSetID(t, store) + ver, err = getBootstrapVersion(seCurVer) + require.NoError(t, err) + require.Equal(t, currentBootstrapVersion, ver) + + // We are now in 5.x, tidb_enable_index_merge should be off. + res = mustExec(t, seCurVer, "select @@tidb_enable_index_merge") + chk = res.NewChunk(nil) + err = res.Next(ctx, chk) + require.NoError(t, err) + require.Equal(t, 1, chk.NumRows()) + row := chk.GetRow(0) + require.Equal(t, 1, row.Len()) + require.Equal(t, int64(0), row.GetInt64(0)) +} + +func TestIndexMergeUpgradeFrom400To500(t *testing.T) { + for i := 0; i < 2; i++ { + ctx := context.Background() + store, _ := createStoreAndBootstrap(t) + defer func() { require.NoError(t, store.Close()) }() + + // upgrade from 4.0.0 to 5.4+. + ver400 := 46 + seV4 := createSessionAndSetID(t, store) + txn, err := store.Begin() + require.NoError(t, err) + m := meta.NewMeta(txn) + err = m.FinishBootstrap(int64(ver400)) + require.NoError(t, err) + err = txn.Commit(context.Background()) + require.NoError(t, err) + mustExec(t, seV4, fmt.Sprintf("update mysql.tidb set variable_value=%d where variable_name='tidb_server_version'", ver400)) + mustExec(t, seV4, fmt.Sprintf("update mysql.GLOBAL_VARIABLES set variable_value='%s' where variable_name='%s'", variable.Off, variable.TiDBEnableIndexMerge)) + mustExec(t, seV4, "commit") + unsetStoreBootstrapped(store.UUID()) + ver, err := getBootstrapVersion(seV4) + require.NoError(t, err) + require.Equal(t, int64(ver400), ver) + + // We are now in 4.0.0, tidb_enable_index_merge is off. + res := mustExec(t, seV4, fmt.Sprintf("select * from mysql.GLOBAL_VARIABLES where variable_name='%s'", variable.TiDBEnableIndexMerge)) + chk := res.NewChunk(nil) + err = res.Next(ctx, chk) + require.NoError(t, err) + require.Equal(t, 1, chk.NumRows()) + row := chk.GetRow(0) + require.Equal(t, 2, row.Len()) + require.Equal(t, variable.Off, row.GetString(1)) + + if i == 0 { + // For the first time, We set tidb_enable_index_merge as on. + // And after upgrade to 5.x, tidb_enable_index_merge should remains to be on. + // For the second it should be off. + mustExec(t, seV4, "set global tidb_enable_index_merge = on") + } + + // Upgrade to 5.x. + domCurVer, err := BootstrapSession(store) + require.NoError(t, err) + defer domCurVer.Close() + seCurVer := createSessionAndSetID(t, store) + ver, err = getBootstrapVersion(seCurVer) + require.NoError(t, err) + require.Equal(t, currentBootstrapVersion, ver) + + // We are now in 5.x, tidb_enable_index_merge should be on because we enable it in 4.0.0. + res = mustExec(t, seCurVer, "select @@tidb_enable_index_merge") + chk = res.NewChunk(nil) + err = res.Next(ctx, chk) + require.NoError(t, err) + require.Equal(t, 1, chk.NumRows()) + row = chk.GetRow(0) + require.Equal(t, 1, row.Len()) + if i == 0 { + require.Equal(t, int64(1), row.GetInt64(0)) + } else { + require.Equal(t, int64(0), row.GetInt64(0)) + } + } +} diff --git a/sessionctx/variable/session.go b/sessionctx/variable/session.go index 057ba9a6dcdff..a11a76a0d7dba 100644 --- a/sessionctx/variable/session.go +++ b/sessionctx/variable/session.go @@ -1159,7 +1159,7 @@ func NewSessionVars() *SessionVars { SlowQueryFile: config.GetGlobalConfig().Log.SlowQueryFile, WaitSplitRegionFinish: DefTiDBWaitSplitRegionFinish, WaitSplitRegionTimeout: DefWaitSplitRegionTimeout, - enableIndexMerge: false, + enableIndexMerge: DefTiDBEnableIndexMerge, NoopFuncsMode: TiDBOptOnOffWarn(DefTiDBEnableNoopFuncs), replicaRead: kv.ReplicaReadLeader, AllowRemoveAutoInc: DefTiDBAllowRemoveAutoInc, diff --git a/sessionctx/variable/sysvar.go b/sessionctx/variable/sysvar.go index a1fcf7e025053..a569b31de37b9 100644 --- a/sessionctx/variable/sysvar.go +++ b/sessionctx/variable/sysvar.go @@ -1094,7 +1094,7 @@ var defaultSysVars = []*SysVar{ s.SetEnableCascadesPlanner(TiDBOptOn(val)) return nil }}, - {Scope: ScopeGlobal | ScopeSession, Name: TiDBEnableIndexMerge, Value: Off, Type: TypeBool, SetSession: func(s *SessionVars, val string) error { + {Scope: ScopeGlobal | ScopeSession, Name: TiDBEnableIndexMerge, Value: BoolToOnOff(DefTiDBEnableIndexMerge), Type: TypeBool, SetSession: func(s *SessionVars, val string) error { s.SetEnableIndexMerge(TiDBOptOn(val)) return nil }}, diff --git a/sessionctx/variable/sysvar_test.go b/sessionctx/variable/sysvar_test.go index e15c9f92b92b8..91b3451f15ed9 100644 --- a/sessionctx/variable/sysvar_test.go +++ b/sessionctx/variable/sysvar_test.go @@ -825,3 +825,12 @@ func TestDefaultCharsetAndCollation(t *testing.T) { require.NoError(t, err) require.Equal(t, val, mysql.DefaultCollationName) } + +func TestIndexMergeSwitcher(t *testing.T) { + vars := NewSessionVars() + vars.GlobalVarsAccessor = NewMockGlobalAccessor4Tests() + val, err := GetSessionOrGlobalSystemVar(vars, TiDBEnableIndexMerge) + require.NoError(t, err) + require.Equal(t, DefTiDBEnableIndexMerge, true) + require.Equal(t, BoolToOnOff(DefTiDBEnableIndexMerge), val) +} diff --git a/sessionctx/variable/tidb_vars.go b/sessionctx/variable/tidb_vars.go index 2e38db2699969..f73909d54626e 100644 --- a/sessionctx/variable/tidb_vars.go +++ b/sessionctx/variable/tidb_vars.go @@ -777,6 +777,7 @@ const ( DefTiDBRegardNULLAsPoint = true DefEnablePlacementCheck = true DefTimestamp = "0" + DefTiDBEnableIndexMerge = true ) // Process global variables. From d5758c0777956ff1cccda919c88f14f5466348ca Mon Sep 17 00:00:00 2001 From: guo-shaoge Date: Sun, 12 Dec 2021 06:01:01 +0800 Subject: [PATCH 2/8] fix case Signed-off-by: guo-shaoge --- cmd/explaintest/r/explain_indexmerge.result | 22 ++++++++++++--------- planner/core/integration_test.go | 1 + planner/core/testdata/plan_suite_out.json | 12 +++++------ 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/cmd/explaintest/r/explain_indexmerge.result b/cmd/explaintest/r/explain_indexmerge.result index 83bc89a593e7c..40e0cb4a1159d 100644 --- a/cmd/explaintest/r/explain_indexmerge.result +++ b/cmd/explaintest/r/explain_indexmerge.result @@ -6,19 +6,23 @@ create index td on t (d); load stats 's/explain_indexmerge_stats_t.json'; explain format = 'brief' select * from t where a < 50 or b < 50; id estRows task access object operator info -TableReader 98.00 root data:Selection -└─Selection 98.00 cop[tikv] or(lt(test.t.a, 50), lt(test.t.b, 50)) - └─TableFullScan 5000000.00 cop[tikv] table:t keep order:false +IndexMerge 98.00 root +├─TableRangeScan(Build) 49.00 cop[tikv] table:t range:[-inf,50), keep order:false +├─IndexRangeScan(Build) 49.00 cop[tikv] table:t, index:tb(b) range:[-inf,50), keep order:false +└─TableRowIDScan(Probe) 98.00 cop[tikv] table:t keep order:false explain format = 'brief' select * from t where (a < 50 or b < 50) and f > 100; id estRows task access object operator info -TableReader 98.00 root data:Selection -└─Selection 98.00 cop[tikv] gt(test.t.f, 100), or(lt(test.t.a, 50), lt(test.t.b, 50)) - └─TableFullScan 5000000.00 cop[tikv] table:t keep order:false +IndexMerge 98.00 root +├─TableRangeScan(Build) 49.00 cop[tikv] table:t range:[-inf,50), keep order:false +├─IndexRangeScan(Build) 49.00 cop[tikv] table:t, index:tb(b) range:[-inf,50), keep order:false +└─Selection(Probe) 98.00 cop[tikv] gt(test.t.f, 100) + └─TableRowIDScan 98.00 cop[tikv] table:t keep order:false explain format = 'brief' select * from t where b < 50 or c < 50; id estRows task access object operator info -TableReader 98.00 root data:Selection -└─Selection 98.00 cop[tikv] or(lt(test.t.b, 50), lt(test.t.c, 50)) - └─TableFullScan 5000000.00 cop[tikv] table:t keep order:false +IndexMerge 98.00 root +├─IndexRangeScan(Build) 49.00 cop[tikv] table:t, index:tb(b) range:[-inf,50), keep order:false +├─IndexRangeScan(Build) 49.00 cop[tikv] table:t, index:tc(c) range:[-inf,50), keep order:false +└─TableRowIDScan(Probe) 98.00 cop[tikv] table:t keep order:false set session tidb_enable_index_merge = on; explain format = 'brief' select * from t where a < 50 or b < 50; id estRows task access object operator info diff --git a/planner/core/integration_test.go b/planner/core/integration_test.go index c3e09b82c2409..93f9d94d18917 100644 --- a/planner/core/integration_test.go +++ b/planner/core/integration_test.go @@ -2203,6 +2203,7 @@ func (s *testIntegrationSuite) TestOptimizeHintOnPartitionTable(c *C) { partition p1 values less than(11), partition p2 values less than(16));`) tk.MustExec(`insert into t values (1,1,"1"), (2,2,"2"), (8,8,"8"), (11,11,"11"), (15,15,"15")`) + tk.MustExec("set @@tidb_enable_index_merge = off") // Create virtual tiflash replica info. dom := domain.GetDomain(tk.Se) diff --git a/planner/core/testdata/plan_suite_out.json b/planner/core/testdata/plan_suite_out.json index 75db6cb736e99..fe29ebe00163c 100644 --- a/planner/core/testdata/plan_suite_out.json +++ b/planner/core/testdata/plan_suite_out.json @@ -286,9 +286,9 @@ }, { "SQL": "select /*+ USE_INDEX_MERGE(t1, c_d_e, f_g) */ * from t where c < 1 or f > 2", - "Best": "TableReader(Table(t)->Sel([or(lt(test.t.c, 1), gt(test.t.f, 2))]))", + "Best": "IndexMergeReader(PartialPlans->[Index(t.c_d_e)[[-inf,1)], Index(t.f)[(2,+inf]]], TablePlan->Table(t))", "HasWarn": true, - "Hints": "use_index(@`sel_1` `test`.`t` )" + "Hints": "use_index_merge(@`sel_1` `t` `c_d_e`, `f`)" }, { "SQL": "select /*+ NO_INDEX_MERGE(), USE_INDEX_MERGE(t, primary, f_g, c_d_e) */ * from t where a < 1 or f > 2", @@ -304,15 +304,15 @@ }, { "SQL": "select /*+ USE_INDEX_MERGE(db2.t) */ * from t where c < 1 or f > 2", - "Best": "TableReader(Table(t)->Sel([or(lt(test.t.c, 1), gt(test.t.f, 2))]))", + "Best": "IndexMergeReader(PartialPlans->[Index(t.c_d_e)[[-inf,1)], Index(t.f)[(2,+inf]]], TablePlan->Table(t))", "HasWarn": true, - "Hints": "use_index(@`sel_1` `test`.`t` )" + "Hints": "use_index_merge(@`sel_1` `t` `c_d_e`, `f`)" }, { "SQL": "select /*+ USE_INDEX_MERGE(db2.t, c_d_e, f_g) */ * from t where c < 1 or f > 2", - "Best": "TableReader(Table(t)->Sel([or(lt(test.t.c, 1), gt(test.t.f, 2))]))", + "Best": "IndexMergeReader(PartialPlans->[Index(t.c_d_e)[[-inf,1)], Index(t.f)[(2,+inf]]], TablePlan->Table(t))", "HasWarn": true, - "Hints": "use_index(@`sel_1` `test`.`t` )" + "Hints": "use_index_merge(@`sel_1` `t` `c_d_e`, `f`)" } ] }, From eb06329fbaa45b200e62ca3c1185262430ce39a2 Mon Sep 17 00:00:00 2001 From: guo-shaoge Date: Sun, 12 Dec 2021 06:07:34 +0800 Subject: [PATCH 3/8] fix case Signed-off-by: guo-shaoge --- planner/core/integration_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/planner/core/integration_test.go b/planner/core/integration_test.go index 93f9d94d18917..52d4625037607 100644 --- a/planner/core/integration_test.go +++ b/planner/core/integration_test.go @@ -2204,6 +2204,9 @@ func (s *testIntegrationSuite) TestOptimizeHintOnPartitionTable(c *C) { partition p2 values less than(16));`) tk.MustExec(`insert into t values (1,1,"1"), (2,2,"2"), (8,8,"8"), (11,11,"11"), (15,15,"15")`) tk.MustExec("set @@tidb_enable_index_merge = off") + defer func() { + tk.MustExec("set @@tidb_enable_index_merge = on") + }() // Create virtual tiflash replica info. dom := domain.GetDomain(tk.Se) From cf5eae70821169a7c05fbbe5f5a7712991eaeab5 Mon Sep 17 00:00:00 2001 From: guo-shaoge Date: Wed, 22 Dec 2021 12:05:20 +0800 Subject: [PATCH 4/8] fix Signed-off-by: guo-shaoge --- session/bootstrap.go | 1 + 1 file changed, 1 insertion(+) diff --git a/session/bootstrap.go b/session/bootstrap.go index 83523413742a5..32c02239dd3ee 100644 --- a/session/bootstrap.go +++ b/session/bootstrap.go @@ -632,6 +632,7 @@ var ( upgradeToVer78, upgradeToVer79, upgradeToVer80, + upgradeToVer81, } ) From 82082f02ef28caf790fbfb17a1d26f1c08930506 Mon Sep 17 00:00:00 2001 From: guo-shaoge Date: Wed, 22 Dec 2021 14:46:05 +0800 Subject: [PATCH 5/8] Update session/bootstrap.go --- session/bootstrap.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/session/bootstrap.go b/session/bootstrap.go index 32c02239dd3ee..3177859c45da5 100644 --- a/session/bootstrap.go +++ b/session/bootstrap.go @@ -541,7 +541,7 @@ const ( // version80 fixes the issue https://github.com/pingcap/tidb/issues/25422. // If the TiDB upgrading from the 4.x to a newer version, we keep the tidb_analyze_version to 1. version80 = 80 - // version80 insert "tidb_enable_index_merge|off" to mysql.GLOBAL_VARIABLES if there is no tidb_enable_index_merge. + // version81 insert "tidb_enable_index_merge|off" to mysql.GLOBAL_VARIABLES if there is no tidb_enable_index_merge. // This will only happens when we upgrade a cluster before 4.0.0 to 4.0.0+. version81 = 81 ) From 47d61048dc67d6c4ab06197c7ca6eebaf1eed1c9 Mon Sep 17 00:00:00 2001 From: guo-shaoge Date: Fri, 24 Dec 2021 17:16:55 +0800 Subject: [PATCH 6/8] add more case Signed-off-by: guo-shaoge --- session/bootstrap_test.go | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/session/bootstrap_test.go b/session/bootstrap_test.go index 2eefa982e4d8f..c5321de21098f 100644 --- a/session/bootstrap_test.go +++ b/session/bootstrap_test.go @@ -929,7 +929,28 @@ func TestAnalyzeVersionUpgradeFrom300To500(t *testing.T) { require.Equal(t, "1", row.GetString(0)) } -func TestIndexMergeUpgradeFrom300To500(t *testing.T) { +func TestIndexMergeInNewCluster(t *testing.T) { + ctx := context.Background() + store, dom := createStoreAndBootstrap(t) + defer func() { require.NoError(t, store.Close()) }() + defer dom.Close() + se := createSessionAndSetID(t, store) + + // In new created cluster(above 5.4+), tidb_enable_index_merge is 1 by default. + mustExec(t, se, "use test;") + r := mustExec(t, se, "select @@tidb_enable_index_merge;") + require.NotNil(t, r) + + chk := r.NewChunk(nil) + err := r.Next(ctx, chk) + require.NoError(t, err) + require.Equal(t, 1, chk.NumRows()) + row := chk.GetRow(0) + require.Equal(t, 1, row.Len()) + require.Equal(t, int64(1), row.GetInt64(0)) +} + +func TestIndexMergeUpgradeFrom300To540(t *testing.T) { ctx := context.Background() store, _ := createStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() @@ -978,7 +999,7 @@ func TestIndexMergeUpgradeFrom300To500(t *testing.T) { require.Equal(t, int64(0), row.GetInt64(0)) } -func TestIndexMergeUpgradeFrom400To500(t *testing.T) { +func TestIndexMergeUpgradeFrom400To540(t *testing.T) { for i := 0; i < 2; i++ { ctx := context.Background() store, _ := createStoreAndBootstrap(t) From ccbd8f2adcb0f70f0d732e21891dda0ff2206f2b Mon Sep 17 00:00:00 2001 From: guo-shaoge Date: Fri, 24 Dec 2021 17:29:22 +0800 Subject: [PATCH 7/8] fix Signed-off-by: guo-shaoge --- session/bootstrap_test.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/session/bootstrap_test.go b/session/bootstrap_test.go index c5321de21098f..914d516912ea1 100644 --- a/session/bootstrap_test.go +++ b/session/bootstrap_test.go @@ -930,19 +930,24 @@ func TestAnalyzeVersionUpgradeFrom300To500(t *testing.T) { } func TestIndexMergeInNewCluster(t *testing.T) { - ctx := context.Background() - store, dom := createStoreAndBootstrap(t) + store, err := mockstore.NewMockStore() + require.NoError(t, err) + // Indicates we are in a new cluster. + require.Equal(t, int64(notBootstrapped), getStoreBootstrapVersion(store)) + dom, err := BootstrapSession(store) + require.NoError(t, err) defer func() { require.NoError(t, store.Close()) }() defer dom.Close() se := createSessionAndSetID(t, store) - // In new created cluster(above 5.4+), tidb_enable_index_merge is 1 by default. + // In a new created cluster(above 5.4+), tidb_enable_index_merge is 1 by default. mustExec(t, se, "use test;") r := mustExec(t, se, "select @@tidb_enable_index_merge;") require.NotNil(t, r) + ctx := context.Background() chk := r.NewChunk(nil) - err := r.Next(ctx, chk) + err = r.Next(ctx, chk) require.NoError(t, err) require.Equal(t, 1, chk.NumRows()) row := chk.GetRow(0) From 3ab1d4c72b5a03d54f2b732bf2401febb81e9f93 Mon Sep 17 00:00:00 2001 From: guo-shaoge Date: Fri, 24 Dec 2021 22:43:49 +0800 Subject: [PATCH 8/8] add comment Signed-off-by: guo-shaoge --- session/bootstrap.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/session/bootstrap.go b/session/bootstrap.go index 3177859c45da5..1fdb93b58ff0e 100644 --- a/session/bootstrap.go +++ b/session/bootstrap.go @@ -1659,6 +1659,8 @@ func upgradeToVer80(s Session, ver int64) { mysql.SystemDB, mysql.GlobalVariablesTable, variable.TiDBAnalyzeVersion, 1) } +// For users that upgrade TiDB from a pre-4.0 version, we want to disable index merge by default. +// This helps minimize query plan regressions. func upgradeToVer81(s Session, ver int64) { if ver >= version81 { return