mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-11-21 14:44:00 +00:00
lib/storage: tune updating a map with today`s metric ids
- Increase update iterval from 1s to 10s. This should reduce CPU usage for large amounts of metric ids with constant churn. - Reduce pendingTodayMetricIDsLock lock duration during the update.
This commit is contained in:
parent
4794f894a4
commit
28f6c36ab4
1 changed files with 9 additions and 7 deletions
|
@ -360,15 +360,17 @@ func (s *Storage) startTodayMetricIDsUpdater() {
|
|||
}()
|
||||
}
|
||||
|
||||
var todayMetricIDsUpdateInterval = time.Second * 10
|
||||
|
||||
func (s *Storage) todayMetricIDsUpdater() {
|
||||
t := time.NewTimer(time.Second)
|
||||
t := time.NewTimer(todayMetricIDsUpdateInterval)
|
||||
for {
|
||||
select {
|
||||
case <-s.stop:
|
||||
return
|
||||
case <-t.C:
|
||||
s.updateTodayMetricIDs()
|
||||
t.Reset(time.Second)
|
||||
t.Reset(todayMetricIDsUpdateInterval)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -762,20 +764,20 @@ func (s *Storage) updateTodayMetricIDs() {
|
|||
return
|
||||
}
|
||||
|
||||
// Slow path tm.m must be updated with non-empty s.pendingTodayMetricIDs.
|
||||
// Slow path: tm.m must be updated with non-empty s.pendingTodayMetricIDs.
|
||||
m := make(map[uint64]struct{}, len(tm.m)+newMetricIDsLen)
|
||||
if tm.date == today {
|
||||
for metricID := range tm.m {
|
||||
m[metricID] = struct{}{}
|
||||
}
|
||||
}
|
||||
|
||||
s.pendingTodayMetricIDsLock.Lock()
|
||||
for metricID := range s.pendingTodayMetricIDs {
|
||||
newMetricIDs := s.pendingTodayMetricIDs
|
||||
s.pendingTodayMetricIDs = make(map[uint64]struct{}, len(newMetricIDs))
|
||||
s.pendingTodayMetricIDsLock.Unlock()
|
||||
for metricID := range newMetricIDs {
|
||||
m[metricID] = struct{}{}
|
||||
}
|
||||
s.pendingTodayMetricIDs = make(map[uint64]struct{}, len(s.pendingTodayMetricIDs))
|
||||
s.pendingTodayMetricIDsLock.Unlock()
|
||||
|
||||
tmNew := &todayMetricIDs{
|
||||
m: m,
|
||||
|
|
Loading…
Reference in a new issue