SplitChunks = function (ns, shard_name, est) { var nextRound = false; do { nextRound = false; var chunks = db.getSiblingDB("config").chunks.find({"ns": ns, "shard": shard_name}).sort({min: 1}); var totalChunks = 0; var totalSize = 0; var totalEmpty = 0; print("ChunkID,Shard,ChunkSize,ObjectsInChunk"); chunks.forEach( function printChunkInfo(chunk) { var db1 = db.getSiblingDB(chunk.ns.split(".")[0]); var key = db.getSiblingDB("config").collections.findOne({_id: chunk.ns}).key; var dataSizeResult = db1.runCommand({ datasize: chunk.ns, keyPattern: key, min: chunk.min, max: chunk.max, estimate: est }) print(chunk._id + "," + chunk.shard + "," + dataSizeResult.size + "," + dataSizeResult.numObjects); totalSize += dataSizeResult.size; totalChunks++; if (dataSizeResult.size == 0) { totalEmpty++; } if (dataSizeResult.size >= 83886080) { print(chunk.ns + " is too big to split."); sh.splitFind(chunk.ns, chunk.min); nextRound = true; } } ) print("***********Summary Chunk Information***********"); print("Total Chunks: " + totalChunks); print("Average Chunk Size (bytes): " + (totalSize / totalChunks)); print("Empty Chunks: " + totalEmpty); print("Average Chunk Size (non-empty): " + (totalSize / (totalChunks - totalEmpty))); } while (nextRound) } SplitChunks("report_his.ConsumeRecord", "shard2", true)