Jumbo-Chunks finden, aufteilen und das Flag löschen
MongoDBShardingBefehl
// Chunks flagged as jumbo (5.0+ config.chunks links to the collection by uuid):
const uuid = db.getSiblingDB("config").collections.findOne({ _id: "shop.musteri" }).uuid;
db.getSiblingDB("config").chunks.find({ uuid: uuid, jumbo: true }, { min: 1, max: 1, shard: 1 })
// If the chunk can be split, split it at the median:
sh.splitFind("shop.musteri", { musteriId: 1000 })
// Last resort for an indivisible chunk, clear the flag manually (a successful split already clears it):
db.adminCommand({ clearJumboFlag: "shop.musteri", find: { musteriId: 1000 } })
// If a single key value is too large, refine the key (4.4+):
db.adminCommand({ refineCollectionShardKey: "shop.musteri", key: { musteriId: 1, siparisId: 1 } })Was es tut
Listet Chunks, die als jumbo markiert sind, weil der Balancer sie nicht verschieben konnte, teilt die aufteilbaren und löscht das Jumbo-Flag; zeigt, wie der Shard Key für riesige Chunks mit einem einzigen Wert verfeinert wird.
Wann einsetzen
Wenn ein Shard deutlich größer bleibt als die anderen, jumbo in der Ausgabe von sh.status() erscheint oder der Balancer Migrationsfehler meldet.
Vorsicht
Ein Chunk, dessen Dokumente alle denselben Shard-Key-Wert haben, lässt sich nicht aufteilen; die einzige dauerhafte Lösung ist, den Shard Key mit refineCollectionShardKey oder reshardCollection zu ändern. refineCollectionShardKey erfordert, dass vorher ein unterstützender Index für den neuen Schlüssel existiert. Das Jumbo-Flag ohne Aufteilen zu löschen führt dazu, dass der Balancer denselben Chunk erneut versucht und wieder scheitert.