DBAtlas · Atlas für Datenbankbetrieb

Jumbo-Chunks finden, aufteilen und das Flag löschen

MongoDBSharding

Befehl

// 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.

In DBAtlas öffnen →

Verwandte Einträge