Questions
8 of 12
1A client gets a dimension-mismatch error when inserting a point. What are the most common root causes?
2A filter query that should return results returns an empty list. What would you check first?
3Why might a collection created without specifying a distance metric or vector size fail immediately, and what does that tell you about how Qdrant treats collection configuration?
4What causes a 'collection not found' error immediately after a collection was reportedly created successfully in a distributed cluster?
5Search results seem semantically wrong even though the embedding model is known to work well. What layers would you check to isolate the problem?
6Recall dropped noticeably after enabling quantization. How would you determine whether the quantization configuration or the rescoring settings are the cause?
7A previously fast query has become slow after months of continuous upserts and deletes, with no configuration changes. What's the most likely explanation?
8How would you distinguish a latency problem caused by disk I/O from one caused by CPU-bound distance computation?
9One node in a three-node Qdrant cluster crashes. What happens to reads and writes for shards that had a replica on that node?
10After a crashed node recovers and rejoins the cluster, how does it catch up on writes it missed?
11What symptoms would indicate a 'split-brain' style problem in a distributed Qdrant cluster, and how does the Raft-based consensus layer prevent it?
12What's your recovery plan if an entire Qdrant cluster is lost (e.g., all nodes' disks fail) and you only have periodic snapshots?
08 / 12

How would you distinguish a latency problem caused by disk I/O from one caused by CPU-bound distance computation?

Use system metrics and workload shape to localize the bottleneck

The two bottlenecks have different signatures and different fixes. Disk I/O latency is characterized by high disk utilization, elevated iowait, and variable latency that correlates with page-cache misses and with the size of the working set. CPU-bound latency is characterized by high CPU utilization on the search threads, stable latency that scales with ef and the number of candidates, and no correlation with disk activity. The first step is to look at the system metrics: on Linux, use iostat or vmstat to check disk utilization and iowait, and top or the equivalent to check CPU utilization of the Qdrant process. If disk utilization is near 100 percent and iowait is high, the bottleneck is I/O. If CPU is pegged and disk is idle, the bottleneck is compute. If both are moderate and latency is still high, the bottleneck may be elsewhere (network, lock contention, or the optimizer).

The mechanism behind each bottleneck is different and produces different workload-shape signatures. Disk I/O latency is determined by page-cache hit rate and disk speed, so it is sensitive to the working set size, the recency of queries, and the size of the collection relative to RAM. A query whose data was recently touched returns quickly; a query that touches cold pages pays the disk latency. This produces a bimodal latency distribution where the p50 may be fine and the p99 is bad. CPU-bound latency is determined by the number of distance computations, which scales with ef and the number of segments traversed, so it is sensitive to query parameters and to the number of segments, not to recency. This produces a tight latency distribution that shifts up or down with the parameters. To distinguish them, vary the workload: if increasing ef makes latency worse, it is CPU-bound; if increasing ef makes little difference but touching more of the collection makes latency worse, it is I/O-bound. You can also run a query against a small collection that fits in RAM and compare with the same query against the large collection - if the small collection is fast and the large one is slow, the difference is cache or disk.

  1. 1

    Disk I/O: high disk utilization, elevated iowait, bimodal latency, correlation with cache misses.

  2. 2

    CPU-bound: high CPU on search threads, stable latency, scaling with ef and candidate count.

  3. 3

    Disk I/O: latency sensitive to working set and recency, p99 much worse than p50.

  4. 4

    CPU-bound: latency sensitive to query parameters, p50 and p99 move together.

  5. 5

    Both: high load with limited cores can look like both; check whether the optimizer or another process is competing.

  6. 6

    System metrics: iostat, vmstat, top, and any Qdrant-specific telemetry your version exposes.

  7. 7

    Workload experiments: vary ef, vary working set, compare with a small in-RAM collection.

The trade-off in fixing the bottleneck is cost and complexity against latency. Disk I/O problems are fixed by adding RAM to expand the page cache, by quantizing to shrink the working set, by moving to NVMe for lower per-read latency, or by exploiting locality with hot/cold tiering. CPU-bound problems are fixed by reducing ef (at the cost of recall), reducing the number of segments, adding cores, or offloading to a GPU for the distance computations. Each fix has its own cost profile, and the right one depends on which bottleneck you have. The common mistake is to assume the problem is CPU-bound because the Qdrant process is using CPU, when the CPU is spent on serialization, merging, or payload lookups rather than on distance computations. The second mistake is to add CPU cores when the bottleneck is I/O, which does nothing. The third mistake is to ignore the optimizer, which competes with queries for both CPU and I/O and can make a single bottleneck look like both. Version note: the metrics Qdrant exposes and the internal behavior of the search path have changed across releases, so use the metrics available on your version and correlate them with client-side latency rather than relying on a fixed diagnostic recipe.

javascript

Version-dependent: the metrics exposed by Qdrant and the internal search path have changed across releases. Some versions expose per-query timing or per-stage metrics; others do not. If you are diagnosing a bottleneck, use the system-level tools that are available on the host and correlate them with client-side latency, rather than relying on a Qdrant-specific metric that may not exist in your version.

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

Scenario Questions

0-2 years experience
  1. 1

    You suspect disk I/O but are not sure. Describe the two commands you would run on the host to check.

  2. 2

    A teammate wants to add more cores to fix latency. Explain how you would first determine whether the bottleneck is CPU or I/O.

2-5 years experience
  1. 1

    Your p99 is high but p50 is fine on an on-disk collection. Explain why this pattern points to I/O and what you would change to reduce the tail.

  2. 2

    Latency scales with ef on a collection that fits in RAM. Explain what that tells you about the bottleneck and what you would tune.

5-8 years experience
  1. 1

    Design a diagnostic script that runs a set of controlled experiments to distinguish CPU-bound from I/O-bound latency on a live collection without disrupting production.

  2. 2

    You are serving a mixed workload of small and large queries. Explain how you would attribute latency to CPU versus I/O per query type and how you would tune each separately.

8+ years experience
  1. 1

    Derive a model for query latency as a function of ef, segment count, page-cache hit rate, and disk latency. Where does the model show the transition from CPU-bound to I/O-bound as the collection grows?

  2. 2

    You are designing a capacity planning tool that predicts whether a new collection will be CPU-bound or I/O-bound. Describe the inputs, the model, and how you would validate it against production telemetry.

Follow-up Questions

  • How would you distinguish disk I/O caused by the search itself from disk I/O caused by the optimizer running concurrently?
  • If both CPU and disk are moderately utilized and latency is still high, what other bottlenecks would you investigate?