定義
moveChunk内部管理コマンド。 シャード 間で チャンクを移動します。
moveChunkmongos管理データベースを使用しながら、 インスタンスを介して コマンドを発行します。次のフォームを使用します。Tip
mongoshでは、このコマンドはsh.moveChunk()ヘルパー メソッドを通じて実行することもできます。ヘルパー メソッドは
mongoshユーザーには便利ですが、データベースコマンドと同じレベルの情報は返されない可能性があります。 便宜上必要ない場合、または追加の戻りフィールドが必要な場合は、 データベースコマンドを使用します。db.adminCommand( { moveChunk : <namespace> , find : <query> , to : <string>, forceJumbo: <boolean>, _secondaryThrottle : <boolean>, writeConcern: <document>, _waitForDelete : <boolean> } ) あるいは、
db.adminCommand( { moveChunk : <namespace> , bounds : <array> , to : <string>, forceJumbo: <boolean>, _secondaryThrottle : <boolean>, writeConcern: <document>, _waitForDelete : <boolean> } ) moveChunkコマンドには次のフィールドがあります:フィールドタイプ説明moveChunkstring
findドキュメント
移動するチャンクのシャードキー値を指定する、シャードキーの等価一致。
boundsフィールドとfindフィールドのいずれかを指定しますが、両方は指定しないでください。findハッシュされたシャードキー を使用するコレクション内のチャンクを選択するために、 フィールドを使用し ない でください。bounds配列
移動する特定のチャンクの境界。 配列は、移動するチャンクのシャードキーの下限と上限のシャードキー値を指定する 2 つのドキュメントで構成されている必要があります。
boundsフィールドとfindフィールドのいずれかを指定しますが、両方は指定しないでください。 ハッシュされたシャードキーを使用するコレクション内のチャンクを選択するには、boundsを使用します。tostring
チャンクの宛先シャードの名前。
ブール値
任意。 コマンドが 移行するには大きすぎるチャンクを移動できるかどうかを決定するフラグです。 そのチャンクにはジャンボ というラベルが付いている場合と付いていない場合があります。
trueの場合、コマンドはチャンクを移動できます。falseの場合、コマンドはチャンクを移動できません。
デフォルトは
falseです。警告:
forceJumbo=trueとmoveChunkコマンドは、コレクションに対する書込み操作をブロックします。このオプションを指定すると、シャードは、設定された チャンク サイズ よりも大きい場合でも、チャンクを移行します。 コレクションは、 移行中は書き込みができなくなります。
この長いブロッキング期間なしでこれらの大きなチャンクを移行するには、代わりに「サイズ制限を超えるバランス範囲」を参照してください。
_secondaryThrottleブール値
任意。 WiredTigerの場合、 はデフォルトで
falseになります。trueの場合、デフォルトでは、チャンクの移行中に移動された各ドキュメントは、バランサーが次のドキュメントに進む前に少なくとも 1 つのセカンダリに伝播します。 これは{ w: 2 }の書込み保証 (write concern) と同等です。別の書込み保証 (write concern) を指定するには、
writeConcernオプションを使用します。falseの場合、バランサーはセカンダリへのレプリケーションを待たずに次のドキュメントに進みます。
詳細については、「セカンダリ スロットル 」を参照してください。
writeConcernドキュメント
任意。 チャンクの移行中に
_secondaryThrottleがセカンダリを待機するために使用する 書込み保証 ( write concern ) を表すドキュメント。writeConcernには_secondaryThrottle: trueが必要です。_waitForDeleteブール値
任意。
trueに設定されている場合、moveChunk操作の削除フェーズはブロックされます。_waitForDeleteのデフォルトはfalseです。_waitForDeleteフィールドが設定されている場合、MongoDB はorphanCleanupDelaySecsの遅延を待機せずに範囲削除を実行します。_waitForDeleteパラメーターを使用していて、セカンダリで読み取り操作が行われている場合、移行の削除フェーズにより、読み取りでドキュメントが見つからない可能性があります。boundsの値は次の形式をとります。[ { hashedField : <minValue> } , { hashedField : <maxValue> } ] 「チャンク移行」セクションでは、MongoDB 上のシャード間でチャンクがどのように移動されるかについて説明します。
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
Considerations
moveChunkデータの初期取り込みに合わせてシャーディングされた クラスター を準備したり、大規模な一括インポート操作を実行したりする場合など、特別な状況でのみ を使用してください。ほとんどの場合、バランサーがシャーディングされたクラスターにチャンクを作成し、バランスをとれるようにします。 詳細については、「 シャーディングされたクラスターで範囲を作成する」を参照してください。
動作
Indexes
moveChunkにはすべてのインデックスがターゲットに存在している必要があります(つまり to )は移行前にシャードを使用し、必要なインデックスが存在しない場合はエラーを返します。
Meta Data Error
moveChunk{chunks コレクションで別のメタデータ操作が進行中の場合、 は次のエラー メッセージを返します。
errmsg: "The collection's metadata lock is already taken."
moveChunkの実行中にバランサー プロセスなどの別のプロセスがメタデータを変更すると、このエラーが表示されることがあります。 副作用のないmoveChunk操作を再試行できます。
maxCatchUpPercentageBeforeBlockingWrites Server Parameter
MongoDB5.0 以降では、転送されるチャンクの合計サイズ(MB maxCatchUpPercentageBeforeBlockingWritesmoveChunk単位)と比較した場合、 操作中にまだ移行されていないデータの最大許可パーセンテージを指定するために、 を設定します。