DBAtlas · Атлас эксплуатации баз данных

Поиск jumbo-чанков, их разделение и снятие флага

MongoDBШардинг

Команда

// 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 } })

Что делает

Выводит чанки с флагом jumbo, которые балансировщик не смог перенести, разделяет те, которые можно разделить, и снимает флаг jumbo; показывает, как уточнить ключ шардирования для огромных чанков с одним значением.

Когда использовать

Когда один шард остаётся заметно больше других, в выводе sh.status() появляется jumbo или балансировщик сообщает об ошибках миграции.

Внимание

Чанк, все документы которого имеют одно значение ключа шардирования, разделить нельзя; единственное долговременное решение — изменить ключ шардирования через refineCollectionShardKey или reshardCollection. refineCollectionShardKey требует заранее существующего индекса для нового ключа. Снятие флага jumbo без разделения заставляет балансировщик повторять попытку с тем же чанком и снова падать.

Открыть в DBAtlas →

Связанные материалы