lib/storage: do not re-calculate stats for heavy tag filters

This should reduce the number of slow queries when stats for heavy tag filters was recalculated.
This commit is contained in:
Aliaksandr Valialkin 2021-02-21 21:32:52 +02:00
parent 48656dcc38
commit 388cdb1980

View file

@ -2797,10 +2797,13 @@ func (is *indexSearch) getMetricIDsForDateAndFilters(date uint64, tfs *TagFilter
tf := &tfs.tfs[i]
loopsCount, lastQueryTimestamp := is.getLoopsCountAndTimestampForDateFilter(date, tf)
origLoopsCount := loopsCount
if currentTime > lastQueryTimestamp+60*60 {
// Reset loopsCount to 0 every hour for collecting updated stats for the tf.
if currentTime > lastQueryTimestamp+3*3600 {
// Update stats once per 3 hours only for relatively fast tag filters.
// There is no need in spending CPU resources on updating stats for slow tag filters.
if loopsCount <= 10e6 {
loopsCount = 0
}
}
if loopsCount == 0 {
// Prevent from possible thundering herd issue when heavy tf is executed from multiple concurrent queries
// by temporary persisting its position in the tag filters list.