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 フラグをクリアする。単一値の巨大なチャンクについて、シャードキーを精緻化する方法を示す。

使用する場面

1 つのシャードが他より明らかに大きいままの場合、sh.status() の出力に jumbo が表示される場合、またはバランサーが移行エラーを報告する場合。

注意

すべてのドキュメントが同じシャードキー値を持つチャンクは分割できない。恒久的な対策は、refineCollectionShardKey または reshardCollection でシャードキーを変更することだけである。refineCollectionShardKey には、新しいキーをサポートするインデックスが事前に存在している必要がある。分割せずに jumbo フラグをクリアすると、バランサーは同じチャンクを再試行して再び失敗する。

DBAtlas で開く →

関連項目