DBAtlas · Atlas d'exploitation des bases de données

Trouver les chunks jumbo, les découper et effacer l'indicateur

MongoDBSharding

Commande

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

Ouvrir dans DBAtlas →

Voir aussi