From 6cff35892c2c29a7d2951d00dc9e8d0668469b52 Mon Sep 17 00:00:00 2001 From: rebelice Date: Wed, 7 Apr 2021 14:18:16 +0800 Subject: [PATCH] *: don't allocate SessionIndexUsageCollector when indexUsageLease equals 0 (#23861) --- session/session.go | 4 +++- session/tidb.go | 7 ++++++- session/tidb_test.go | 21 +++++++++++++++++++++ statistics/handle/handle_test.go | 4 ++++ 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/session/session.go b/session/session.go index 8e068da8851d7..f529647248af7 100644 --- a/session/session.go +++ b/session/session.go @@ -2092,7 +2092,9 @@ func CreateSessionWithOpt(store kv.Storage, opt *Opt) (Session, error) { // which periodically updates stats using the collected data. if do.StatsHandle() != nil && do.StatsUpdating() { s.statsCollector = do.StatsHandle().NewSessionStatsCollector() - s.idxUsageCollector = do.StatsHandle().NewSessionIndexUsageCollector() + if GetIndexUsageSyncLease() > 0 { + s.idxUsageCollector = do.StatsHandle().NewSessionIndexUsageCollector() + } } return s, nil diff --git a/session/tidb.go b/session/tidb.go index 8dc13ed580d65..85732b457f7a6 100644 --- a/session/tidb.go +++ b/session/tidb.go @@ -65,7 +65,7 @@ func (dm *domainMap) Get(store kv.Storage) (d *domain.Domain, err error) { ddlLease := time.Duration(atomic.LoadInt64(&schemaLease)) statisticLease := time.Duration(atomic.LoadInt64(&statsLease)) - idxUsageSyncLease := time.Duration(atomic.LoadInt64(&indexUsageSyncLease)) + idxUsageSyncLease := GetIndexUsageSyncLease() err = util.RunWithRetry(util.DefaultMaxRetries, util.RetryInterval, func() (retry bool, err1 error) { logutil.BgLogger().Info("new domain", zap.String("store", store.UUID()), @@ -161,6 +161,11 @@ func SetIndexUsageSyncLease(lease time.Duration) { atomic.StoreInt64(&indexUsageSyncLease, int64(lease)) } +// GetIndexUsageSyncLease returns the index usage sync lease time. +func GetIndexUsageSyncLease() time.Duration { + return time.Duration(atomic.LoadInt64(&indexUsageSyncLease)) +} + // DisableStats4Test disables the stats for tests. func DisableStats4Test() { SetStatsLease(-1) diff --git a/session/tidb_test.go b/session/tidb_test.go index 02e9571c18482..e6d9fb5c5541b 100644 --- a/session/tidb_test.go +++ b/session/tidb_test.go @@ -215,3 +215,24 @@ func (s *testMainSuite) TestKeysNeedLock(c *C) { c.Assert(flag.HasPresumeKeyNotExists(), IsTrue) c.Assert(keyNeedToLock(indexKey, deleteVal, flag), IsTrue) } + +func (s *testMainSuite) TestIndexUsageSyncLease(c *C) { + store, err := mockstore.NewMockStore() + c.Assert(err, IsNil) + do, err := BootstrapSession(store) + c.Assert(err, IsNil) + do.SetStatsUpdating(true) + st, err := CreateSessionWithOpt(store, nil) + c.Assert(err, IsNil) + se, ok := st.(*session) + c.Assert(ok, IsTrue) + c.Assert(se.idxUsageCollector, IsNil) + + SetIndexUsageSyncLease(1) + defer SetIndexUsageSyncLease(0) + st, err = CreateSessionWithOpt(store, nil) + c.Assert(err, IsNil) + se, ok = st.(*session) + c.Assert(ok, IsTrue) + c.Assert(se.idxUsageCollector, NotNil) +} diff --git a/statistics/handle/handle_test.go b/statistics/handle/handle_test.go index c2dd99cd39970..68ca14f1a5603 100644 --- a/statistics/handle/handle_test.go +++ b/statistics/handle/handle_test.go @@ -1995,6 +1995,8 @@ type statsSerialSuite struct { func (s *statsSerialSuite) TestIndexUsageInformation(c *C) { defer cleanEnv(c, s.store, s.do) + session.SetIndexUsageSyncLease(1) + defer session.SetIndexUsageSyncLease(0) tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") tk.MustExec("create table t_idx(a int, b int)") @@ -2034,6 +2036,8 @@ func (s *statsSerialSuite) TestIndexUsageInformation(c *C) { func (s *statsSerialSuite) TestGCIndexUsageInformation(c *C) { defer cleanEnv(c, s.store, s.do) + session.SetIndexUsageSyncLease(1) + defer session.SetIndexUsageSyncLease(0) tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") tk.MustExec("create table t_idx(a int, b int)")