作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!
VictoriaMetrics 1.73.1 的changelog: https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.73.1
重点关注的是cache的配置:
在之前的版本,vm-storage中几个关键的cache大小,是根据用户配置的内存占用量(或者百分比)来动态决定比例的:
see: https://github.com/ahfuzhang/victoria-metrics-1.72.0/blob/5b88c993cb742fe4e03e622819a726d9f2b874cb/VictoriaMetrics-1.72.0-cluster/lib/storage/storage.go#L218
mem := memory.Allowed()
s.tsidCache = s.mustLoadCache("MetricName->TSID", "metricName_tsid", int(float64(mem)*0.35)) // 如果存在缓存的文件 // 最多使用可用内存的 35% 来缓存TSID
s.metricIDCache = s.mustLoadCache("MetricID->TSID", "metricID_tsid", mem/16) // 加载这些文件
s.metricNameCache = s.mustLoadCache("MetricID->MetricName", "metricID_metricName", mem/10)
MetricName 是一个完整的 time series的label name + label value的数据, tsid是这个metric对应的存储层的唯一ID.
这些关键缓存决定了搜索性能,在特定的场合,把这些缓存配置得更大能够取得更好的收益。具体的场景是:
- 历史节点,只读不写,那么就可以分配更多内存来用于关键数据的缓存;
- 在需要遍历大量time series的情况,比如vm-alert发起的告警查询,那么加大缓存也可能会增加收益。
因此:
- 需要观测vm-storage的缓存上报数据,来决定要如何优化缓存;see: Cache tuning
- 根据数据来优化缓存配置.