qdrant-memory-usage-optimization — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited qdrant-memory-usage-optimization (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Qdrant operates with two types of memory:
memory tier (default pinned; cached lets the OS evict it, cold needs no up-front RAM), where it was always resident before. On Qdrant 1.19 or newer this is controlled per-component with memory: pinned (e.g. quantized vectors, payload indexes); see memory tier legacy settings for deployments on version 1.18 or older.memory: cached (pre-warmed into page cache at startup) or memory: cold (lazy disk reads, not pre-warmed); on 1.18 or older it's controlled via the on_disk boolean 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.
/metrics endpoint. See Monitoring docs.<!-- ToDo: Talk about memory usage of each components once API is available -->
Optimal memory usage depends on the use case.
For a detailed breakdown of memory usage at large scale, see Large scale memory usage example.
Payload indexes and HNSW graph also require memory, along with vectors themselves, so it's important to consider them in calculations.
Additionally, Qdrant requires some extra memory for optimizations. During optimization, optimized segments are fully loaded into RAM, so it is important to leave enough headroom. The larger max_segment_size is, the more headroom is needed.
Putting frequently used components (such as HNSW index) on disk might cause significant performance degradation. On Qdrant 1.19 or newer this is set with memory: cold in hnsw_config; on 1.18 or older with hnsw_config.on_disk: true. There are some scenarios, however, when it can be a good option:
hnsw_config.memory decides their tier and vectors.memory is ignored for those segments. Unless quantization has its own explicit memory, quantized vectors are cold when the HNSW index is cold and pinned in any other tier, so set it explicitly (for example pinned) if the index is cold but you want the quantized vectors in RAM Inline storage.The main challenge is to put on disk those parts of data, which are rarely accessed. Here are the main techniques to achieve that:
bits8, 4x compression) is the recommended default over scalar quantization at the same compression (use scalar for the Manhattan metric), and it doesn't rescore by default, unlike bits2, bits1_5, and bits1 Quantization docsuint8 only makes sense for vectors already quantized to 0-255. On Qdrant 1.19 or newer, the TurboQuant datatypes replace the original vectors with a compressed form (dense vectors and multivectors, not sparse): turbo4 (4 bits/dimension, ~8x, from 1.19), turbo8 (~4x, closer to float32 recall, from 1.20), and turbo16 (~2x, from 1.20, closer to float32 than float16). Any of them can be paired with 1-bit quantization for cheaper rescoring than pairing 1-bit quantization with full-precision vectors. A TurboQuant datatype is not TurboQuant quantization, which keeps the originals and adds a copy. Read more about vector datatypes in documentationio_uring) for concurrent disk reads, which can significantly improve performance of on-disk storage: storage.performance.io_uring: auto on Qdrant 1.19 or newer (applies to every cold structure), async_scorer: true on 1.18 or older (vector rescoring only). Requires Linux with a kernel that supports io_uring Async I/Omemory: cold is the default on Qdrant 1.19 or newer; on 1.18 or older, set on_disk_payload: true Default tiersmemory: cold on Qdrant 1.19 or newer, on_disk: true on 1.18 or older docsmemory: cold on the sparse vector index on Qdrant 1.19 or newer (defaults to pinned), on_disk: true on 1.18 or older docs~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.