mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-11-21 14:44:00 +00:00
6a4bd5049b
### Describe Your Changes In most cases histograms are exposed in sorted manner with lower buckets being first. This means that during scraping buckets with lower bounds have higher chance of being updated earlier than upper ones. Previously, values were propagated from upper to lower bounds, which means that in most cases that would produce results higher than expected once all buckets will become updated. Propagating from upper bound effectively limits highest value of histogram to the value of previous scrape. Once the data will become consistent in the subsequent evaluation this causes spikes in the result. Changing propagation to be from lower to higher buckets reduces value spikes in most cases due to nature of the original inconsistency. See: https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4580 An example histogram with previous(red) and updated(blue) versions: ![1719565540](https://github.com/VictoriaMetrics/VictoriaMetrics/assets/1367798/605c5e60-6abe-45b5-89b2-d470b60127b8) This also makes logic of filling nan values with lower buckets values: [1 2 3 nan nan nan] => [1 2 3 3 3 3] obsolete. Since buckets are now fixed from lower ones to upper this happens in the main loop, so there is no need in a second one. --------- Signed-off-by: Zakhar Bessarab <z.bessarab@victoriametrics.com> Signed-off-by: hagen1778 <roman@victoriametrics.com> Co-authored-by: Andrii Chubatiuk <andrew.chubatiuk@gmail.com> Co-authored-by: hagen1778 <roman@victoriametrics.com> |
||
---|---|---|
.. | ||
active_queries.go | ||
aggr.go | ||
aggr_incremental.go | ||
aggr_incremental_test.go | ||
aggr_test.go | ||
binary_op.go | ||
eval.go | ||
eval_test.go | ||
exec.go | ||
exec_test.go | ||
memory_limiter.go | ||
memory_limiter_test.go | ||
parser.go | ||
rollup.go | ||
rollup_result_cache.go | ||
rollup_result_cache_test.go | ||
rollup_test.go | ||
rollup_timing_test.go | ||
timeseries.go | ||
timeseries_test.go | ||
transform.go | ||
transform_test.go | ||
tzdata.go |