我有一个由几个碎片组成的小集群,每个碎片都是一个副本集,由两个真正的节点和一个仲裁器组成。在集合上启用了分片,比如generator_v1_food。
我已经停止了所有更新集合的程序(在这些程序中,只有、、upsert和find操作,根本没有remove )。然后,集合计数返回如下(2-3秒间隔)。我还关掉了平衡器。日志的最后一行(我操作的碎片)都是关于复制集的。
mongos> db.generator_v1_food.find().count()
28279890
mongos> db.generator_v1_food.find().count()
28278067
mongos> db.generator_v1_food.find().count()
28278008
... 幕后发生了什么事?任何指示都是很好的。
发布于 2013-09-06 03:04:50
引用:
仅仅因为您将平衡器状态设置为"off“,并不意味着它没有继续运行,并且完成了上次执行的moveChunk的清理工作。 当上一次moveChunk.commit事件发生时,您应该能够在changelog集合中看到config中的内容--也就是提交到从某个块转移到新的(目标)碎片的文档的moveChunk进程。但在此之后,旧碎片需要异步删除不再属于它的文档。由于“计数”是从元数据中提取的,并且实际上并不询问有多少文档是“真正的”,因此在平衡回合中“飞行中”将对“双计数文档”(或任何未正确清理的文档或任何未完成的平衡尝试)进行查询。 艾赛亚
https://stackoverflow.com/questions/18633352
复制相似问题