mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-11-23 12:31:07 +01:00
lib/storage: make indexdb/tagFilters
cache size configurable (#2667)
The default size of `indexdb/tagFilters` now can be overridden via `storage.cacheSizeIndexDBTagFilters` flag. Please, be careful with changing default size since it may lead to inefficient work of the vmstorage or OOM exceptions. https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2663 Signed-off-by: hagen1778 <roman@victoriametrics.com> Co-authored-by: Nikolay <nik@victoriametrics.com>
This commit is contained in:
parent
2177089f94
commit
642eb1c534
@ -1537,7 +1537,8 @@ The panel `Cache usage %` in `Troubleshooting` section shows the percentage of u
|
|||||||
from the allowed size by type. If the percentage is below 100%, then no further tuning needed.
|
from the allowed size by type. If the percentage is below 100%, then no further tuning needed.
|
||||||
|
|
||||||
Please note, default cache sizes were carefully adjusted accordingly to the most
|
Please note, default cache sizes were carefully adjusted accordingly to the most
|
||||||
practical scenarios and workloads. Change the defaults only if you understand the implications.
|
practical scenarios and workloads. Change the defaults only if you understand the implications
|
||||||
|
and vmstorage has enough free memory to accommodate the new size.
|
||||||
|
|
||||||
To override the default values see command-line flags with `-storage.cacheSize` prefix.
|
To override the default values see command-line flags with `-storage.cacheSize` prefix.
|
||||||
See the full description of flags [here](#list-of-command-line-flags).
|
See the full description of flags [here](#list-of-command-line-flags).
|
||||||
|
@ -58,6 +58,7 @@ var (
|
|||||||
cacheSizeStorageTSID = flagutil.NewBytes("storage.cacheSizeStorageTSID", 0, "Overrides max size for storage/tsid cache. See https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#cache-tuning")
|
cacheSizeStorageTSID = flagutil.NewBytes("storage.cacheSizeStorageTSID", 0, "Overrides max size for storage/tsid cache. See https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#cache-tuning")
|
||||||
cacheSizeIndexDBIndexBlocks = flagutil.NewBytes("storage.cacheSizeIndexDBIndexBlocks", 0, "Overrides max size for indexdb/indexBlocks cache. See https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#cache-tuning")
|
cacheSizeIndexDBIndexBlocks = flagutil.NewBytes("storage.cacheSizeIndexDBIndexBlocks", 0, "Overrides max size for indexdb/indexBlocks cache. See https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#cache-tuning")
|
||||||
cacheSizeIndexDBDataBlocks = flagutil.NewBytes("storage.cacheSizeIndexDBDataBlocks", 0, "Overrides max size for indexdb/dataBlocks cache. See https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#cache-tuning")
|
cacheSizeIndexDBDataBlocks = flagutil.NewBytes("storage.cacheSizeIndexDBDataBlocks", 0, "Overrides max size for indexdb/dataBlocks cache. See https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#cache-tuning")
|
||||||
|
cacheSizeIndexDBTagFilters = flagutil.NewBytes("storage.cacheSizeIndexDBTagFilters", 0, "Overrides max size for indexdb/tagFilters cache. See https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#cache-tuning")
|
||||||
)
|
)
|
||||||
|
|
||||||
// CheckTimeRange returns true if the given tr is denied for querying.
|
// CheckTimeRange returns true if the given tr is denied for querying.
|
||||||
@ -97,6 +98,7 @@ func InitWithoutMetrics(resetCacheIfNeeded func(mrs []storage.MetricRow)) {
|
|||||||
storage.SetRetentionTimezoneOffset(*retentionTimezoneOffset)
|
storage.SetRetentionTimezoneOffset(*retentionTimezoneOffset)
|
||||||
storage.SetFreeDiskSpaceLimit(minFreeDiskSpaceBytes.N)
|
storage.SetFreeDiskSpaceLimit(minFreeDiskSpaceBytes.N)
|
||||||
storage.SetTSIDCacheSize(cacheSizeStorageTSID.N)
|
storage.SetTSIDCacheSize(cacheSizeStorageTSID.N)
|
||||||
|
storage.SetTagFilterCacheSize(cacheSizeIndexDBTagFilters.N)
|
||||||
mergeset.SetIndexBlocksCacheSize(cacheSizeIndexDBIndexBlocks.N)
|
mergeset.SetIndexBlocksCacheSize(cacheSizeIndexDBIndexBlocks.N)
|
||||||
mergeset.SetDataBlocksCacheSize(cacheSizeIndexDBDataBlocks.N)
|
mergeset.SetDataBlocksCacheSize(cacheSizeIndexDBDataBlocks.N)
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ The following tip changes can be tested by building VictoriaMetrics components f
|
|||||||
|
|
||||||
## tip
|
## tip
|
||||||
|
|
||||||
|
* FEATURE: allow overriding default limits for in-memory cache `indexdb/tagFilters` via flag `-storage.cacheSizeIndexDBTagFilters`. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2663).
|
||||||
* FEATURE: add support of `lowercase` and `uppercase` relabeling actions for compatibility reasons. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2664).
|
* FEATURE: add support of `lowercase` and `uppercase` relabeling actions for compatibility reasons. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2664).
|
||||||
* FEATURE: support query tracing, which allows determining bottlenecks during query processing. See [these docs](https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#query-tracing) and [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1403).
|
* FEATURE: support query tracing, which allows determining bottlenecks during query processing. See [these docs](https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#query-tracing) and [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1403).
|
||||||
* FEATURE: [vmagent](https://docs.victoriametrics.com/vmagent.html): remove dependency on Internet access in `http://vmagent:8429/targets` page. Previously the page layout was broken without Internet access. See [shis issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2594).
|
* FEATURE: [vmagent](https://docs.victoriametrics.com/vmagent.html): remove dependency on Internet access in `http://vmagent:8429/targets` page. Previously the page layout was broken without Internet access. See [shis issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2594).
|
||||||
|
@ -1537,7 +1537,8 @@ The panel `Cache usage %` in `Troubleshooting` section shows the percentage of u
|
|||||||
from the allowed size by type. If the percentage is below 100%, then no further tuning needed.
|
from the allowed size by type. If the percentage is below 100%, then no further tuning needed.
|
||||||
|
|
||||||
Please note, default cache sizes were carefully adjusted accordingly to the most
|
Please note, default cache sizes were carefully adjusted accordingly to the most
|
||||||
practical scenarios and workloads. Change the defaults only if you understand the implications.
|
practical scenarios and workloads. Change the defaults only if you understand the implications
|
||||||
|
and vmstorage has enough free memory to accommodate the new size.
|
||||||
|
|
||||||
To override the default values see command-line flags with `-storage.cacheSize` prefix.
|
To override the default values see command-line flags with `-storage.cacheSize` prefix.
|
||||||
See the full description of flags [here](#list-of-command-line-flags).
|
See the full description of flags [here](#list-of-command-line-flags).
|
||||||
|
@ -1541,7 +1541,8 @@ The panel `Cache usage %` in `Troubleshooting` section shows the percentage of u
|
|||||||
from the allowed size by type. If the percentage is below 100%, then no further tuning needed.
|
from the allowed size by type. If the percentage is below 100%, then no further tuning needed.
|
||||||
|
|
||||||
Please note, default cache sizes were carefully adjusted accordingly to the most
|
Please note, default cache sizes were carefully adjusted accordingly to the most
|
||||||
practical scenarios and workloads. Change the defaults only if you understand the implications.
|
practical scenarios and workloads. Change the defaults only if you understand the implications
|
||||||
|
and vmstorage has enough free memory to accommodate the new size.
|
||||||
|
|
||||||
To override the default values see command-line flags with `-storage.cacheSize` prefix.
|
To override the default values see command-line flags with `-storage.cacheSize` prefix.
|
||||||
See the full description of flags [here](#list-of-command-line-flags).
|
See the full description of flags [here](#list-of-command-line-flags).
|
||||||
|
@ -110,12 +110,26 @@ type indexDB struct {
|
|||||||
indexSearchPool sync.Pool
|
indexSearchPool sync.Pool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var maxTagFilterCacheSize int
|
||||||
|
|
||||||
|
// SetTagFilterCacheSize overrides the default size of indexdb/tagFilters cache
|
||||||
|
func SetTagFilterCacheSize(size int) {
|
||||||
|
maxTagFilterCacheSize = size
|
||||||
|
}
|
||||||
|
|
||||||
|
func getTagFilterCacheSize() int {
|
||||||
|
if maxTagFilterCacheSize <= 0 {
|
||||||
|
return int(float64(memory.Allowed()) / 32)
|
||||||
|
}
|
||||||
|
return maxTagFilterCacheSize
|
||||||
|
}
|
||||||
|
|
||||||
// openIndexDB opens index db from the given path.
|
// openIndexDB opens index db from the given path.
|
||||||
//
|
//
|
||||||
// The last segment of the path should contain unique hex value which
|
// The last segment of the path should contain unique hex value which
|
||||||
// will be then used as indexDB.generation
|
// will be then used as indexDB.generation
|
||||||
//
|
//
|
||||||
// The rotationTimestamp must be set to the current unix timestamp when ipenIndexDB
|
// The rotationTimestamp must be set to the current unix timestamp when openIndexDB
|
||||||
// is called when creating new indexdb during indexdb rotation.
|
// is called when creating new indexdb during indexdb rotation.
|
||||||
func openIndexDB(path string, s *Storage, rotationTimestamp uint64) (*indexDB, error) {
|
func openIndexDB(path string, s *Storage, rotationTimestamp uint64) (*indexDB, error) {
|
||||||
if s == nil {
|
if s == nil {
|
||||||
@ -143,7 +157,7 @@ func openIndexDB(path string, s *Storage, rotationTimestamp uint64) (*indexDB, e
|
|||||||
tb: tb,
|
tb: tb,
|
||||||
name: name,
|
name: name,
|
||||||
|
|
||||||
tagFiltersCache: workingsetcache.New(mem / 32),
|
tagFiltersCache: workingsetcache.New(getTagFilterCacheSize()),
|
||||||
s: s,
|
s: s,
|
||||||
loopsPerDateTagFilterCache: workingsetcache.New(mem / 128),
|
loopsPerDateTagFilterCache: workingsetcache.New(mem / 128),
|
||||||
}
|
}
|
||||||
|
@ -276,7 +276,7 @@ func OpenStorage(path string, retentionMsecs int64, maxHourlySeries, maxDailySer
|
|||||||
|
|
||||||
var maxTSIDCacheSize int
|
var maxTSIDCacheSize int
|
||||||
|
|
||||||
// SetTSIDCacheSize overrides the default size of storage/tsid cahce
|
// SetTSIDCacheSize overrides the default size of storage/tsid cache
|
||||||
func SetTSIDCacheSize(size int) {
|
func SetTSIDCacheSize(size int) {
|
||||||
maxTSIDCacheSize = size
|
maxTSIDCacheSize = size
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user