对空集合进行分片需要很长时间

时间:2017-03-14 18:03:50

标签: mongodb mongodb-query

(我正在使用Mongo 3.2.4)

当我对一个空集合进行分片时,它需要大约100秒。输入的命令示例:

sh.shardCollection("db_rel.timeseries3", {location:1, shard:1, start:1, end:1})

应该注意的是,我们将分片标签引脚数据用于特定区域,例如伦敦,纽约,香港。

当我拖动mongos日志时,我可以看到shard命令并且它具有以下内容:

going to create 1 chunk(s) for: db_rel.timeseries3

然后:

ChunkManager: time to load chunks for ddp_rel.timeseries3: 90ms sequenceNumber: 12102 version: 1|0||58c6e0ea395448d97cb66ba8 based on: (empty)

到目前为止,这似乎是明智的。但是我看到ChunkManager经历了数据中的其他集合,其中有100个,做同样的事情。每个人花费大约200毫秒,这总共需要很长时间。

我相信(但无法找到相关的文档),因为这些集合是空的(日志记录的最后部分是基于:(空)')。当我对一个新集合进行分片时,ChunkManager会唤醒并尝试在其他集合中分发数据,但是因为它们是空的,所以它不知道要迁移到哪个区域。

有人能证实上述假设吗?

有没有办法将初始块标记到某个位置以防止ChunkManager遍历所有集合?还是其他一些解决方法?

我们将要创建> 10,000个集合,在新的空集合上使用每个分片命令是不可行的> 100秒。

1 个答案:

答案 0 :(得分:0)

似乎这是一个已知问题,并在Mongo 3.4中修复: Mongo DB JIRA