app/vmselect/netstorage: pre-allocate 4 block references per each time series during querying

Usually the number of blocks returned per each time series during queries is around 4.
So it is a good idea to pre-allocate 4 block references per time series
in order to reduce the number of memory allocations.
This commit is contained in:
Aliaksandr Valialkin 2023-01-09 22:03:21 -08:00
parent c5e0f527bc
commit df2a494a7c
No known key found for this signature in database
GPG key ID: A72BEC6CD3D0DED1

View file

@ -1061,6 +1061,7 @@ func ProcessSearchQuery(qt *querytracer.Tracer, sq *storage.SearchQuery, deadlin
maxSeriesCount := sr.Init(qt, vmstorage.Storage, tfss, tr, sq.MaxMetrics, deadline.Deadline()) maxSeriesCount := sr.Init(qt, vmstorage.Storage, tfss, tr, sq.MaxMetrics, deadline.Deadline())
indexSearchDuration.UpdateDuration(startTime) indexSearchDuration.UpdateDuration(startTime)
type blockRefs struct { type blockRefs struct {
brsPrealloc [4]blockRef
brs []blockRef brs []blockRef
} }
m := make(map[string]*blockRefs, maxSeriesCount) m := make(map[string]*blockRefs, maxSeriesCount)
@ -1094,6 +1095,7 @@ func ProcessSearchQuery(qt *querytracer.Tracer, sq *storage.SearchQuery, deadlin
brs := m[metricName] brs := m[metricName]
if brs == nil { if brs == nil {
brs = &blockRefs{} brs = &blockRefs{}
brs.brs = brs.brsPrealloc[:0]
} }
brs.brs = append(brs.brs, blockRef{ brs.brs = append(brs.brs, blockRef{
partRef: br.PartRef(), partRef: br.PartRef(),