From bced9ee666ed1bba17442781d4cd0eb2b9d51bac Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Tue, 29 Jun 2021 19:54:08 +0300 Subject: [PATCH] lib/{mergeset,storage}: reduce the maximum lifetime for cached indexdb and data blocks from 2 minutes to a minute This should reduce memory usage on a system with high number of active time series and a high churn rate. One minute is enough for caching the blocks needed for repeated queries (e.g. alerting rules, recording rules and dashboard refreshes). --- lib/mergeset/part.go | 10 ++++++---- lib/storage/part.go | 5 +++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/mergeset/part.go b/lib/mergeset/part.go index 7da60ceb30..2fb5607e67 100644 --- a/lib/mergeset/part.go +++ b/lib/mergeset/part.go @@ -205,8 +205,9 @@ func (idxbc *indexBlockCache) cleanByTimeout() { currentTime := fasttime.UnixTimestamp() idxbc.mu.Lock() for k, idxbe := range idxbc.m { - // Delete items accessed more than two minutes ago. - if currentTime-atomic.LoadUint64(&idxbe.lastAccessTime) > 2*60 { + // Delete items accessed more than a minute ago. + // This time should be enough for repeated queries. + if currentTime-atomic.LoadUint64(&idxbe.lastAccessTime) > 60 { delete(idxbc.m, k) } } @@ -349,8 +350,9 @@ func (ibc *inmemoryBlockCache) cleanByTimeout() { currentTime := fasttime.UnixTimestamp() ibc.mu.Lock() for k, ibe := range ibc.m { - // Delete items accessed more than a two minutes ago. - if currentTime-atomic.LoadUint64(&ibe.lastAccessTime) > 2*60 { + // Delete items accessed more than a minute ago. + // This time should be enough for repeated queries. + if currentTime-atomic.LoadUint64(&ibe.lastAccessTime) > 60 { delete(ibc.m, k) } } diff --git a/lib/storage/part.go b/lib/storage/part.go index 378cdc8694..f5949f1ed0 100644 --- a/lib/storage/part.go +++ b/lib/storage/part.go @@ -204,8 +204,9 @@ func (ibc *indexBlockCache) cleanByTimeout() { currentTime := fasttime.UnixTimestamp() ibc.mu.Lock() for k, ibe := range ibc.m { - // Delete items accessed more than two minutes ago. - if currentTime-atomic.LoadUint64(&ibe.lastAccessTime) > 2*60 { + // Delete items accessed more than a minute ago. + // This time should be enough for repeated queries. + if currentTime-atomic.LoadUint64(&ibe.lastAccessTime) > 60 { delete(ibc.m, k) } }