From b2cc028137753446e6da1740dbd23da5c37ef3cb Mon Sep 17 00:00:00 2001 From: MyonKeminta Date: Wed, 8 Feb 2023 16:21:21 +0800 Subject: [PATCH 1/5] Enable aggressive locking by default Signed-off-by: MyonKeminta --- sessionctx/variable/tidb_vars.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sessionctx/variable/tidb_vars.go b/sessionctx/variable/tidb_vars.go index 2149e2387f236..820b7f5757f47 100644 --- a/sessionctx/variable/tidb_vars.go +++ b/sessionctx/variable/tidb_vars.go @@ -1177,7 +1177,7 @@ const ( DefTiDBTTLDeleteWorkerCount = 4 DefaultExchangeCompressionMode = kv.ExchangeCompressionModeUnspecified DefTiDBEnableResourceControl = false - DefTiDBPessimisticTransactionAggressiveLocking = false + DefTiDBPessimisticTransactionAggressiveLocking = true DefTiDBEnablePlanCacheForParamLimit = true ) From 0fe9944570ada754b0e628645ca75fa71f862819 Mon Sep 17 00:00:00 2001 From: MyonKeminta Date: Wed, 8 Feb 2023 17:39:41 +0800 Subject: [PATCH 2/5] Fix panic on restricted sql Signed-off-by: MyonKeminta --- sessiontxn/isolation/base.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sessiontxn/isolation/base.go b/sessiontxn/isolation/base.go index dd1e2881b389e..85fcfde5f3828 100644 --- a/sessiontxn/isolation/base.go +++ b/sessiontxn/isolation/base.go @@ -510,7 +510,10 @@ func (p *basePessimisticTxnContextProvider) OnHandlePessimisticStmtStart(ctx con if err := p.baseTxnContextProvider.OnHandlePessimisticStmtStart(ctx); err != nil { return err } - if p.sctx.GetSessionVars().PessimisticTransactionAggressiveLocking && p.txn != nil { + if p.sctx.GetSessionVars().PessimisticTransactionAggressiveLocking && + p.txn != nil && + p.sctx.GetSessionVars().ConnectionID != 0 && + !p.sctx.GetSessionVars().InRestrictedSQL { if err := p.txn.StartAggressiveLocking(); err != nil { return err } From cca563f70802233973b0ac56a7edbb9df20f8e94 Mon Sep 17 00:00:00 2001 From: MyonKeminta Date: Wed, 8 Feb 2023 17:42:10 +0800 Subject: [PATCH 3/5] Revert "Enable aggressive locking by default" This reverts commit b2cc028137753446e6da1740dbd23da5c37ef3cb. --- sessionctx/variable/tidb_vars.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sessionctx/variable/tidb_vars.go b/sessionctx/variable/tidb_vars.go index 820b7f5757f47..2149e2387f236 100644 --- a/sessionctx/variable/tidb_vars.go +++ b/sessionctx/variable/tidb_vars.go @@ -1177,7 +1177,7 @@ const ( DefTiDBTTLDeleteWorkerCount = 4 DefaultExchangeCompressionMode = kv.ExchangeCompressionModeUnspecified DefTiDBEnableResourceControl = false - DefTiDBPessimisticTransactionAggressiveLocking = true + DefTiDBPessimisticTransactionAggressiveLocking = false DefTiDBEnablePlanCacheForParamLimit = true ) From d89652db0ecaf5569ce419e4db5efb08dadc9a6b Mon Sep 17 00:00:00 2001 From: MyonKeminta Date: Wed, 8 Feb 2023 19:20:09 +0800 Subject: [PATCH 4/5] Add test Signed-off-by: MyonKeminta --- session/bootstrap.go | 8 ++++++++ sessiontxn/isolation/repeatable_read_test.go | 15 +++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/session/bootstrap.go b/session/bootstrap.go index a18947be5230c..9a9e96b4acd63 100644 --- a/session/bootstrap.go +++ b/session/bootstrap.go @@ -29,6 +29,7 @@ import ( "time" "github.com/pingcap/errors" + "github.com/pingcap/failpoint" "github.com/pingcap/tidb/bindinfo" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/domain" @@ -2490,6 +2491,13 @@ func doDMLWorks(s Session) { case variable.TiDBEnableMutationChecker: vVal = variable.On } + + failpoint.Inject("enableAggressiveLockingOnBootstrap", func() { + if v.Name == variable.TiDBPessimisticTransactionAggressiveLocking { + vVal = variable.On + } + }) + // sanitize k and vVal value := fmt.Sprintf(`("%s", "%s")`, sqlexec.EscapeString(k), sqlexec.EscapeString(vVal)) values = append(values, value) diff --git a/sessiontxn/isolation/repeatable_read_test.go b/sessiontxn/isolation/repeatable_read_test.go index 085b64c34cc38..a2c0641ff456a 100644 --- a/sessiontxn/isolation/repeatable_read_test.go +++ b/sessiontxn/isolation/repeatable_read_test.go @@ -700,3 +700,18 @@ func TestRRWaitTSTimeInSlowLog(t *testing.T) { require.NotEqual(t, waitTS1, waitTS3) require.NotEqual(t, waitTS2, waitTS3) } + +func TestIssue41194(t *testing.T) { + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/session/enableAggressiveLockingOnBootstrap", "return")) + defer func() { + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/session/enableAggressiveLockingOnBootstrap")) + }() + + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + + tk.MustExec("use test") + tk.MustExec("create table t (id int primary key, v int)") + tk.MustExec("insert into t values (1, 1), (2, 2), (3, 3)") + tk.MustExec("analyze table t") +} From 9112608cca7b56a5d8c13efd6688bc93f2f487d6 Mon Sep 17 00:00:00 2001 From: MyonKeminta Date: Wed, 8 Feb 2023 21:18:17 +0800 Subject: [PATCH 5/5] Close result set in SaveTableStatsToStorage Signed-off-by: MyonKeminta --- statistics/handle/handle.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/statistics/handle/handle.go b/statistics/handle/handle.go index 7743c2338dcfa..b2c472c2d2c20 100644 --- a/statistics/handle/handle.go +++ b/statistics/handle/handle.go @@ -1566,6 +1566,10 @@ func SaveTableStatsToStorage(sctx sessionctx.Context, results *statistics.Analyz if err != nil { return err } + err = rs.Close() + if err != nil { + return err + } var curCnt, curModifyCnt int64 if len(rows) > 0 { snapshot := rows[0].GetUint64(0)