From 51cd19d2e376585acc5564a81a0f285b28f71bf1 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Mon, 12 Jul 2021 14:33:39 +0300 Subject: [PATCH] lib/storage: reset perKeyMisses stats less frequently This should reduce CPU usage for queries executed with intervals higher than 30 seconds --- lib/mergeset/part.go | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/lib/mergeset/part.go b/lib/mergeset/part.go index eb5daace5..8aafb6074 100644 --- a/lib/mergeset/part.go +++ b/lib/mergeset/part.go @@ -196,10 +196,16 @@ func (idxbc *indexBlockCache) MustClose() { func (idxbc *indexBlockCache) cleaner() { ticker := time.NewTicker(30 * time.Second) defer ticker.Stop() + perKeyMissesTicker := time.NewTicker(2 * time.Minute) + defer perKeyMissesTicker.Stop() for { select { case <-ticker.C: idxbc.cleanByTimeout() + case <-perKeyMissesTicker.C: + idxbc.perKeyMissesLock.Lock() + idxbc.perKeyMisses = make(map[uint64]int, len(idxbc.perKeyMisses)) + idxbc.perKeyMissesLock.Unlock() case <-idxbc.cleanerStopCh: return } @@ -217,10 +223,6 @@ func (idxbc *indexBlockCache) cleanByTimeout() { } } idxbc.mu.Unlock() - - idxbc.perKeyMissesLock.Lock() - idxbc.perKeyMisses = make(map[uint64]int, len(idxbc.perKeyMisses)) - idxbc.perKeyMissesLock.Unlock() } func (idxbc *indexBlockCache) Get(k uint64) *indexBlock { @@ -360,10 +362,16 @@ func (ibc *inmemoryBlockCache) MustClose() { func (ibc *inmemoryBlockCache) cleaner() { ticker := time.NewTicker(30 * time.Second) defer ticker.Stop() + perKeyMissesTicker := time.NewTicker(2 * time.Minute) + defer perKeyMissesTicker.Stop() for { select { case <-ticker.C: ibc.cleanByTimeout() + case <-perKeyMissesTicker.C: + ibc.perKeyMissesLock.Lock() + ibc.perKeyMisses = make(map[inmemoryBlockCacheKey]int, len(ibc.perKeyMisses)) + ibc.perKeyMissesLock.Unlock() case <-ibc.cleanerStopCh: return } @@ -381,10 +389,6 @@ func (ibc *inmemoryBlockCache) cleanByTimeout() { } } ibc.mu.Unlock() - - ibc.perKeyMissesLock.Lock() - ibc.perKeyMisses = make(map[inmemoryBlockCacheKey]int, len(ibc.perKeyMisses)) - ibc.perKeyMissesLock.Unlock() } func (ibc *inmemoryBlockCache) Get(k inmemoryBlockCacheKey) *inmemoryBlock {