排障时最容易犯的错:把一切归因于 ef /
nprobe。本系列前 16
篇给出的机制说明,真实故障往往落在
可见性、段状态、过滤选择度、离线队列、对象存储与副本拓扑。本文提供检查清单,不含未跑的集群数字。
本文是「向量检索引擎」系列第 17 篇(共 18 篇)。→ 系列目录
一、先分清四种「不好」
| 症状标签 | 可能机制 | 优先篇章 |
|---|---|---|
| 召回差 | 度量/归一化、索引未加载、过滤杀候选、一致性过旧 | 2、8、10、11、12 |
| 延迟高 | GuaranteeTs 等待、冷段加载、Proxy reduce、对象 GET、副本不均 | 4、6、7、9、12、14 |
| 写入失败/抖动 | WAL 迁移 Wait for Ready、Coordinator 不可用 | 4、5、14 |
| 空间/内存爆 | 删除未 compaction、索引堆积、副本因子过高 | 10、13、14 |
二、召回:对照金标准
- 同一度量与归一化:cosine/IP/L2 与入库预处理是否一致(frontier/08、第 2 篇)。
- Flat 金标准:小样本上 Flat/IDMAP 算 Recall@k,再比 HNSW/IVF(第 2、8 篇)。
- 过滤:估选择度 \(s\);低 \(s\) 时检查是否滤空局部 Top-\(k\)(第 11 篇)。
- 删除/TTL:结果是否应排除已删/过期实体(第 13 篇);bitset 是否传播到历史副本。
- 索引就绪:Sealed 是否已建索并 handoff 到 Query Node(第 3、10 篇)——「能搜」可能走劣路径。
不要用「感觉答案不对」代替 Recall@k 与固定评测集。
三、延迟:拆等待 vs 计算 vs I/O
总延迟 ≈ 一致性等待 + 段加载/对象 GET + Growing/Sealed 检索 + 多级 reduce + 客户端
| 检查 | 动作 |
|---|---|
| 换 Eventually/Bounded 后是否明显下降 | 若是,主因是 ServiceTime 等待(第 12 篇),不是 ANN |
| 仅首次/偶发尖刺 | 冷 handoff、缓存失效、副本改派(第 7、14 篇) |
随 topk/shard 数线性变差 |
Proxy 最终 reduce 或候选倍数过大(第 9、11 篇) |
| 与对象存储错误率相关 | 第 6 篇寻址;查 MinIO/S3 慢请求与 LIST/GET |
| Streaming 写入后立即 Strong 搜索 | 预期等待;改 Session 是否满足产品(第 12 篇) |
四、堆积:建索与 compaction
| 信号 | 含义 |
|---|---|
| 段很多、索引任务队列长 | Data Node 跟不上写入(第 10 篇) |
| 删除后磁盘不降 | 软删未 compaction(第 13 篇) |
| 小段爆炸 | flush 过碎或 compaction 落后(第 3、10 篇) |
处理方向:扩 Data Node、降写入突发、调段大小策略、给 compaction 留 I/O 预算——加 Query Node 副本不会消化建索队列。
五、OOM 与容量
- Query Node:\(\text{段数据} + \text{索引} + \text{副本因子}\)(第 14 篇)。
- Proxy:超大并发 × 大候选归并缓冲(第 4、9 篇)。
- Data Node:建索峰值(向量矩阵 + 图结构)(第 8、10 篇)。
- Growing:Streaming Node 内存策略与 flush 是否触发(第 5 篇)。
对象存储「便宜」不降低 内存工作集;副本用 QPS 换的是 RAM。
六、写入路径检查单
- Coordinator 是否单活跃且健康(第 4 篇)。
- 是否处于 WAL 迁移 / Wait for Ready(第 5、14 篇)。
- shard/channel 是否倾斜到单 Streaming Node(第 3 篇)。
- Woodpecker 模式是否为 MemoryBuffer 导致写延迟达数百毫秒量级(第 5 篇官方模式说明)。
七、开放问题
- 统一「召回 / 延迟 / 队列深度」的红黄绿看板模板。
- 自动区分 GuaranteeTs 等待与 Knowhere 计算的 tracing span。
- 多集群联邦排障时的时钟与 TSO 对齐。
八、小结
先定性症状,再映射到段、水位、过滤、队列、对象与副本;最后才拧
ef。选型与阅读地图见 第 18
篇。
参考资料
返回 系列目录 | 上一篇:Lance 对照 | 下一篇:选型与阅读地图
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【向量检索引擎】Data Node:compaction 与 index build
说明 Milvus 2.6.x 中 Data Node 作为离线 Worker 如何承接 Coordinator 下发的建索引与 compaction,输入输出如何进出对象存储,以及索引堆积与 handoff 如何影响查询新鲜度与资源争用。
【向量检索引擎】Delete · Upsert · TTL:软删、覆盖写与过期回收
按官方文档说明 delete(主键/过滤)、upsert(override/merge)、collection TTL 的语义;结合 bitset 软删与 compaction 物理回收,划清「搜索不可见」与「对象存储已清理」的时间差。
【向量检索引擎】向量引擎全景:算法、RAG 与专用引擎之间的一层
定位专用向量检索引擎相对 ANN 算法、RAG 应用与湖仓格式的分工;以 Milvus 2.6.x 四层架构给出本系列 18 篇地图,并交代从 SIGMOD 2021 系统论文到存算分离演进的谱系。
【向量检索引擎】ANN 算法工程接口:从 HNSW/IVF 到 Knowhere 契约
把 HNSW、IVF、DiskANN、Flat 收成引擎侧的索引类型与参数面;说明 Train/Build/Search 生命周期如何贴着 Segment,并与 db-frontier/08 的算法细节、第 8 篇 Knowhere 实现分层分工。