qdrant-memory-usage-optimization
Understanding memory usage
Qdrant operates with two types of memory:
-
Resident memory (aka RSSAnon) - memory used for internal data structures like the ID tracker, plus components that stay fully in RAM. As of Qdrant 1.20 the ID tracker has its own
memorytier (defaultpinned;cachedlets the OS evict it,coldneeds no up-front RAM), where it was always resident before. On Qdrant 1.19 or newer this is controlled per-component withmemory: pinned(e.g. quantized vectors, payload indexes); see memory tier legacy settings for deployments on version 1.18 or older. -
OS page cache - memory used for caching disk reads, which can be released when needed. Original vectors are normally stored in page cache, so the service won't crash if RAM is full, but performance may degrade. On Qdrant 1.19 or newer this corresponds to
memory: cached(pre-warmed into page cache at startup) ormemory: cold(lazy disk reads, not pre-warmed); on 1.18 or older it's controlled via theon_diskboolean on vectors, HNSW config, sparse vector index, and payload index. See Memory Tiers docs (available on 1.19+).
It is normal for the OS page cache to occupy all available RAM, but if resident memory is above 80% of total RAM, it is a sign of a problem.
Memory usage monitoring
- Qdrant exposes memory usage through the
/metricsendpoint. See Monitoring docs.