https://www.cnblogs.com/abclife/p/15968628.html
根据这篇文档中的脚本,在我们自己的环境中跑了下,第一次跑的结果如下:

运行完上面跑出的split脚本后,还是存在jumbo块,第二次跑出的结果:

从上面结果可以看出,chunks的数量增加了,但jumbo chunks的数量没有减少很多。
也和阿里云后台沟通,jumbo chunk不能分裂的原因:
因为大部分jumbo chunk是相同shard key组成的,所以无法继续分割。
不知道有没有通过这种方法分割成功的案例。
具体运行脚本如下:
1、使用以下脚本找出未被检测到的Jumbo块,并生成相关命令:
var allChunkInfo =function(ns){
var chunks = db.getSiblingDB("config").chunks.find({"ns": ns}).sort({min:1}).noCursorTimeout(); //this willreturnallchunksforthe ns orderedbymin
var totalChunks = 0;
var totalJumbo = 0;
var totalSize = 0;
var totalEmpty = 0;
chunks.forEach(
functionprintChunkInfo(chunk) {
var db1 = db.getSiblingDB(chunk.ns.split(".")[0]) // get thedatabasewe will be running the command against later
varkey= db.getSiblingDB("config").collections.findOne({_id:chunk.ns}).key; // will need thisforthe dataSize call
// dataSizereturnsthe info we needonthe data, but using the estimateoptiontouse countsisless intensive
var dataSizeResult = db1.runCommand({datasize:chunk.ns, keyPattern:key,min:chunk.min,max:chunk.max, estimate:false});
if(dataSizeResult.size> 67108864) {
totalJumbo++;
print('sh.splitFind("'+ chunk.ns.toString() +'", '+ JSON.stringify(chunk.min) +')'+' // '+ chunk.shard +' '+ Math.round(dataSizeResult.size/1024/1024) +' MB '+ dataSizeResult.numObjects );
}
totalSize += dataSizeResult.size;
totalChunks++;
if (dataSizeResult.size== 0) { totalEmpty++ }; //countempty chunksforsummary
}
)
print("***********Summary Chunk Information***********");
print("Total Chunks: "+totalChunks);
print("Total Jumbo Chunks: "+totalJumbo);
print("Average Chunk Size (Mbytes): "+(totalSize/totalChunks/1024/1024));
print("Empty Chunks: "+totalEmpty);
print("Average Chunk Size (non-empty): "+(totalSize/(totalChunks-totalEmpty)/1024/1024));
}
2、脚本必须通过mongos router进行调用:
mongos> allChunkInfo("db.test_col")
3、 生成如下结果
sh.splitFind("db.test_col", {"_id":"jhxT2neuI5fB4o4KBIASK1"}) // shard-1 222 MB 7970
sh.splitFind("db.test_col", {"_id":"zrAESqSZjnpnMI23oh5JZD"}) // shard-2 226 MB 7988
sh.splitFind("db.test_col", {"_id":"SgkCkfSDrY789e9nD4crk9"}) // shard-1 218 MB 7986
sh.splitFind("db.test_col", {"_id":"X5MKEH4j32OhmAhY7LGPMm"}) // shard-1 238 MB 8338
...
***********Summary Chunk Information***********
Total Chunks: 5047
Total Jumbo Chunks: 120
Average ChunkSize(Mbytes): 19.29779934868946
Empty Chunks: 1107
Average ChunkSize(non-empty): 24.719795257064895
4、运行上一步骤的split命令
备注:阿里云分片集群介绍
什么是MongoDB分片集群_云数据库 MongoDB 版(MongoDB)-阿里云帮助中心



















