Questions
5 of 13
1Why does Qdrant recommend disabling indexing (or raising the indexing threshold) during a large bulk import, then re-enabling it afterward?
2What is the purpose of the indexing_threshold setting, and how does it affect small versus large collections differently?
3How does GPU-accelerated indexing change the economics of re-indexing a large, frequently-updated collection?
4What is incremental HNSW indexing, and why does it matter for upsert-heavy workloads?
5Your Qdrant search endpoint's p50 latency looks fine, but p99 latency is very high. What are the most likely causes to investigate first?
6How would you reduce query latency for a collection that must remain on-disk due to its size, without moving the whole collection into RAM?
7What is the effect of increasing the number of search threads/parallelism on a single node with limited CPU cores?
8How would you benchmark whether a proposed quantization configuration is worth the accuracy trade-off for your workload?
9What's the difference between scaling Qdrant vertically (bigger node) and horizontally (more shards/nodes), and when does horizontal scaling stop paying off?
10Two teams store the same 50-million-vector collection - one keeps it fully in memory, one on disk with quantization. What operational differences should each expect?
11Why can moving the payload storage engine on-disk versus in-memory have a bigger impact on filtered-search latency than the vector storage location?
12How would you decide, for a specific collection, whether to enable quantization with rescoring versus simply moving vectors on-disk without quantization?
13What memory overhead does the HNSW graph itself add on top of the raw vector data, and why does that matter when planning RAM for an in-memory collection?
05 / 13

Your Qdrant search endpoint's p50 latency looks fine, but p99 latency is very high. What are the most likely causes to investigate first?

Tail latency usually comes from I/O, background work, or query shape outliers

A healthy p50 with a bad p99 almost always means the median request is served from a fast path - cache-resident data, an indexed vector, a simple filter - and the slow tail is hitting a slow path that only a fraction of requests trigger. The first thing to check is the storage layer. On an on-disk collection, a request whose pages are in the page cache returns in microseconds, while a request whose pages have been evicted blocks on a disk read. That is the classic bimodal distribution: most requests hit cache, a few miss and pay the disk latency. Correlating p99 spikes with page-cache miss rate or with disk I/O metrics is the fastest way to confirm. The second common cause is background optimizer activity: segment merges, vacuuming, and index building consume CPU, memory bandwidth, and I/O, and they can cause p99 spikes that coincide with optimizer runs. The third is query shape: a small fraction of queries may have a highly selective filter, a large offset, a multivector rerank, or a payload retrieval that makes them much more expensive than the median.

The diagnosis method is to segment the traffic and measure latency per segment rather than in aggregate. Break queries down by whether they use a filter, by filter selectivity, by whether they use a multivector field, by offset, and by whether they return vectors. Most systems find that the p99 is concentrated in one or two segments - for example, filtered queries on an unindexed payload field, or queries that return multivectors. If the segments all look similar and the p99 is uniformly bad, the cause is more likely systemic: storage I/O, CPU contention, or a node-level resource issue. On a distributed cluster, also check whether the p99 correlates with a particular shard or replica - a single slow shard can dominate the tail because the coordinator waits for the slowest shard. And check the consistency level: consistency=majority or all can make the tail sensitive to the slowest replica.

  1. 1

    Cold page cache / disk reads: bimodal latency where cache misses dominate the tail. Check page-cache hit rate and disk I/O.

  2. 2

    Background optimizer: merges, vacuums, and index builds compete with search for CPU and I/O. Correlate p99 spikes with optimizer activity.

  3. 3

    Query shape: filtered queries on unindexed fields, large offsets, multivector reranks, and vector retrieval concentrate the tail.

  4. 4

    Distributed effects: one slow shard or replica sets the p99 because the coordinator waits for the slowest response.

  5. 5

    Consistency level: stronger read consistency makes the tail sensitive to the slowest replica.

  6. 6

    Resource contention: other processes on the node, CPU throttling, and memory pressure can all show up as tail latency.

The trade-off in fixing tail latency is usually cost against predictability. Keeping more data in RAM reduces cache-miss tails but costs money; tuning the optimizer to be less aggressive reduces p99 spikes but slows ingest and consolidation; adding payload indexes reduces filtered-query tails but costs memory and slows writes. The choice depends on which segment dominates the tail and what the business values. The common mistake is optimizing the median - raising ef or adding CPU to make p50 faster - when the tail is caused by something the median never touches. The second mistake is assuming the tail is caused by the vector search when it is actually caused by payload retrieval, serialization, or the network. The third mistake is ignoring replica and shard skew: a single hot shard can produce a tail that looks mysterious until you break latency down by shard. Version note: the metrics exposed by Qdrant and the client, and the details of the optimizer's scheduling, have changed across releases - use the metrics available on your version and correlate them with client-side latency rather than relying on a fixed diagnostic checklist.

javascript

Version-dependent: the exact metrics Qdrant exposes for optimizer activity, segment state, and per-shard latency have evolved, and the optimizer's scheduling behavior has been tuned over releases. If you are diagnosing tail latency on a specific version, check which metrics are available at runtime (collection info, cluster info, and any server-side metrics endpoints) rather than assuming a particular dashboard.

Difficulty: 7/10
Topics: Latency Tuning, Optimizer, Memory Optimization

Scenario Questions

0-2 years experience
  1. 1

    You notice p99 latency spikes every few minutes but p50 is stable. List the first three things you would check and why.

  2. 2

    A teammate says the fix is to raise ef on all queries. Explain why that could make the tail worse rather than better.

2-5 years experience
  1. 1

    Your p99 is 10x p50 and you suspect cold page cache. Explain how you would confirm it and what configuration changes would reduce it without adding RAM.

  2. 2

    You have a distributed collection with 8 shards and p99 is much worse than a single-shard deployment of the same data. Diagnose whether fan-out, merge cost, or a slow shard is the cause.

5-8 years experience
  1. 1

    Design a latency monitoring strategy that attributes tail latency to specific causes (storage, optimizer, query shape, shard skew) rather than reporting a single p99 number.

  2. 2

    You must hit a 20ms p99 SLO on an on-disk collection. Walk through the changes you would make in priority order and the expected impact of each.

8+ years experience
  1. 1

    Derive the expected p99 of an on-disk collection as a function of working-set size, RAM, disk latency distribution, and query arrival rate. Where does the model predict a tail that no amount of ef tuning will fix?

  2. 2

    You are designing an SLO-driven autoscaling system for a Qdrant cluster. Describe the signals you would use, how you would distinguish latency caused by load from latency caused by cache misses, and how you would avoid oscillating scaling decisions.

Follow-up Questions

  • How would you distinguish a p99 caused by cold page cache from one caused by optimizer activity, if both produce spikes at similar times?
  • If the p99 is caused by a single slow shard, what are your options, and what would you do if the shard cannot be rebalanced without downtime?