You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Milvus重复更新相同数据时total_rows与indexed_rows持续增长的原因

Milvus Upsert 统计信息与count()结果不一致的原因

核心原因:Milvus的MVCC多版本机制

Milvus采用MVCC(多版本并发控制)保障读写并发一致性,执行upsert操作时:

  • 对已存在主键的记录,不会直接覆盖旧数据,而是插入新的记录版本,并将旧版本标记为墓碑(tombstone)状态
  • 集合统计信息里的total_rows和indexed_rows统计的是所有物理存储的记录(包括被标记删除的旧版本),因此每次upsert相同的1000条记录,都会新增1000条新记录版本,统计数值就会每次增加1000

count()结果正确的原因

count()查询会自动过滤掉所有被标记为墓碑的旧版本记录,只统计当前有效的数据行,所以无论执行多少次upsert,有效记录始终是1000条,count()返回结果保持不变。

验证与同步统计信息的方法

如果想要让统计信息的数值和有效记录数一致,可以手动触发Milvus的**数据压缩(compaction)**操作,清理掉已标记的旧版本记录:

# 使用Python SDK手动触发compaction
from pymilvus import Collection
collection = Collection("your_collection_name")
collection.compaction()

执行compaction后,再次查看集合统计信息,total_rows和indexed_rows会更新为当前有效的1000条记录。


内容的提问来源于stack exchange,提问作者tmandyai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 17:14:53