utils.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. SplitChunks = function (ns, shard_name, est) {
  2. var nextRound = false;
  3. do {
  4. nextRound = false;
  5. var chunks = db.getSiblingDB("config").chunks.find({"ns": ns, "shard": shard_name}).sort({min: 1});
  6. var totalChunks = 0;
  7. var totalSize = 0;
  8. var totalEmpty = 0;
  9. print("ChunkID,Shard,ChunkSize,ObjectsInChunk");
  10. chunks.forEach(
  11. function printChunkInfo(chunk) {
  12. var db1 = db.getSiblingDB(chunk.ns.split(".")[0]);
  13. var key = db.getSiblingDB("config").collections.findOne({_id: chunk.ns}).key;
  14. var dataSizeResult = db1.runCommand({
  15. datasize: chunk.ns,
  16. keyPattern: key,
  17. min: chunk.min,
  18. max: chunk.max,
  19. estimate: est
  20. })
  21. print(chunk._id + "," + chunk.shard + "," + dataSizeResult.size + "," + dataSizeResult.numObjects);
  22. totalSize += dataSizeResult.size;
  23. totalChunks++;
  24. if (dataSizeResult.size == 0) {
  25. totalEmpty++;
  26. }
  27. if (dataSizeResult.size >= 83886080) {
  28. print(chunk.ns + " is too big to split.");
  29. sh.splitFind(chunk.ns, chunk.min);
  30. nextRound = true;
  31. }
  32. }
  33. )
  34. print("***********Summary Chunk Information***********");
  35. print("Total Chunks: " + totalChunks);
  36. print("Average Chunk Size (bytes): " + (totalSize / totalChunks));
  37. print("Empty Chunks: " + totalEmpty);
  38. print("Average Chunk Size (non-empty): " + (totalSize / (totalChunks - totalEmpty)));
  39. } while (nextRound)
  40. }
  41. SplitChunks("report_his.ConsumeRecord", "shard2", true)