如何在Mongodb中检查集合是否分片

11

我写了

db.runCommand({enablesharding : "database"})

db.runCommand({shardcollection : "database.coll_1",key : {_id :"hashed"}})

如何检查集合是否分片? 可能存在我不知道的某些函数。 请帮助我!


3
"db.printShardingStatus()"是需要翻译的内容,正确的翻译应该是:"db.printShardingStatus()",对吗?" - Sergio Tulentsev
3个回答

17

我使用以下命令:

use 数据库名 db.集合名.getShardDistribution()

如果集合被分片,则输出其分片分布,否则输出集合 数据库名.集合名 未被分片。 查看 这里 获取更多详细信息。

我也使用 @Scott 的评论 (use 数据库名; db.集合名.stats().sharded),但我更喜欢 getShardDistribution,因为它更简洁。


2

连接到mongos并运行以下命令:

use config;
db.collections.find( {_id: "db.colname" , dropped : false } )

如果集合是共享的,它将与其分片键一起显示在那里。

3
我遇到过这种情况,执行上述命令返回了有效的对象,表明集合启用了分片,但是使用.stats()方法显示该集合未启用分片。你可以使用以下代码进行检查: use 数据库名; db.集合名.stats().sharded - Scott
@Scott 可能是因为集合中的数据不足,无法开始将其分成块并存储在不同的分片中。假设 A 是最小的数据量,从该数据量开始对您的集合进行分片,除非您的数据集大小大于 A,否则所有数据都将位于第一个相同的分片上。 - MrRobot
1
在我们看到的情况下,集合肯定有足够的数据来移动块,但即使在第一个块分裂或移动发生之前,集合仍应该将自己作为分片广告,这就是问题所在。 - Scott

0

db.printShardingStatus()

同时提供元数据


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Luciana Oliveira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接