Trouver les chunks jumbo, les découper et effacer l'indicateur
MongoDBShardingCommande
// 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 } })Ce que fait la commande
Liste les chunks marqués jumbo parce que le balancer n'a pas pu les déplacer, découpe ceux qui peuvent l'être et efface l'indicateur jumbo ; montre comment affiner la shard key pour les énormes chunks à valeur unique.
Quand l'utiliser
Quand un shard reste nettement plus grand que les autres, que jumbo apparaît dans la sortie de sh.status(), ou que le balancer signale des erreurs de migration.
Attention
Un chunk dont tous les documents partagent la même valeur de shard key ne peut pas être découpé ; la seule correction durable est de changer la shard key avec refineCollectionShardKey ou reshardCollection. refineCollectionShardKey nécessite qu'un index supportant la nouvelle clé existe au préalable. Effacer l'indicateur jumbo sans découper amène le balancer à réessayer le même chunk et à échouer de nouveau.