DBAtlas · Veritabanı operasyon atlası

Jumbo chunk'ları bul, böl ve bayrağını temizle

MongoDBSharding

Komut

// Jumbo isaretli chunk'lar (5.0+ config.chunks koleksiyona uuid ile baglanir):
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 })
// Chunk bolunebiliyorsa ortadan bol:
sh.splitFind("shop.musteri", { musteriId: 1000 })
// Bolunemeyen chunk icin son care, bayragi elle kaldir (basarili split bayragi zaten kaldirir):
db.adminCommand({ clearJumboFlag: "shop.musteri", find: { musteriId: 1000 } })
// Tek bir key degeri cok buyukse key'i genislet (4.4+):
db.adminCommand({ refineCollectionShardKey: "shop.musteri", key: { musteriId: 1, siparisId: 1 } })

Ne yapar?

Balancer'ın taşıyamadığı için jumbo olarak işaretlenen chunk'ları listeler, bölünebilenleri böler ve jumbo bayrağını kaldırır; tek değerli dev chunk'lar için shard key'i genişletme yolunu gösterir.

Ne zaman kullanılır?

Bir shard diğerlerinden belirgin şekilde büyük kaldığında, sh.status() çıktısında jumbo görüldüğünde veya balancer migration hatası verdiğinde.

Dikkat

Tüm belgeleri aynı shard key değerine sahip bir chunk bölünemez; bu durumda tek kalıcı çözüm shard key'i refineCollectionShardKey veya reshardCollection ile değiştirmektir. refineCollectionShardKey yeni key için uygun bir index'in önceden var olmasını ister. Jumbo bayrağını bölmeden kaldırmak, balancer'ın aynı chunk'ı tekrar deneyip yine başarısız olmasına yol açar.

DBAtlas'ta aç →

İlgili