mergeChunks
定義
mergeChunks
シャーディングされたコレクションの場合、
mergeChunks
はシャード上の連続するチャンク範囲を 1 つのチャンクに結合します。mergeChunks
admin
インスタンスからmongos
データベースに対して コマンドを発行します。
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
重要
このコマンドはサーバーレスインスタンスではサポートされていません。 詳細については、「サポートされていないコマンド 」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
このコマンドの構文は、次のとおりです。
db.adminCommand( { mergeChunks: <namespace>, bounds : [ { <shardKeyField>: <minFieldValue> }, { <shardKeyField>: <maxFieldValue> } ] } )
複合シャードキーの場合、 bounds
仕様に完全なシャードキーを含める必要があります。 たとえば、シャードキーが{ x: 1, y:
1 }
の場合、 mergeChunks
の形式は次のようになります。
db.adminCommand( { mergeChunks: <namespace>, bounds: [ { x: <minValue>, y: <minValue> }, { x: <maxValue>, y: <maxValue> } ] } )
コマンドフィールド
このコマンドは、次のフィールドを使用します。
アクセス制御
authorization
を使用して実行されている配置では、組み込みロールclusterManager
は必要な特権を提供します。
動作
注意
mergeChunks
は特別な状況でのみ使用してください。 たとえば、多くのドキュメントを排除した後にシャーディングされたクラスターをクリーンアップする場合。
チャンクを正常にマージするには、次の条件を満たす必要があります。
bounds
フィールドでは、<minkey>
と<maxkey>
はマージするチャンクの下限と上限に対応する必要があります。チャンクは同じシャード上に存在する必要があります。
チャンクは連続している必要があります。
mergeChunks
これらの条件が満たされない場合、 はエラーを返します。
メッセージを返す
成功すると、 mergeChunks
は次のドキュメントを返します。
{ "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1510767081, 1), "signature" : { "hash" : BinData(0,"okKHD0QuzcpbVQg7mP2YFw6lM04="), "keyId" : NumberLong("6488693018630029321") } }, "operationTime" : Timestamp(1510767081, 1) }
別の操作が進行中
mergeChunks
{chunks
コレクションで別のメタデータ操作が進行中の場合、 は次のエラー メッセージを返します。
errmsg: "The collection's metadata lock is already taken."
mergeChunks
の実行中にバランサー プロセスなどの別のプロセスがメタデータを変更すると、このエラーが表示されることがあります。 副作用のないmergeChunks
操作の再試行が可能です。
異なるシャード上のチャンク
入力チャンクが同じシャードにない場合、 mergeChunks
は次のようなエラーを返します。
{ "ok" : 0, "errmsg" : "could not merge chunks, collection test.users does not contain a chunk ending at { username: \"user63169\" }", "$clusterTime" : { "clusterTime" : Timestamp(1510767081, 1), "signature" : { "hash" : BinData(0,"okKHD0QuzcpbVQg7mP2YFw6lM04="), "keyId" : NumberLong("6488693018630029321") } }, "operationTime" : Timestamp(1510767081, 1) }
非連続的なチャンク
入力チャンクが連続していない場合、 mergeChunks
は次のようなエラーを返します。
{ "ok" : 0, "errmsg" : "could not merge chunks, collection test.users has more than 2 chunks between [{ username: \"user29937\" }, { username: \"user49877\" })" "$clusterTime" : { "clusterTime" : Timestamp(1510767081, 1), "signature" : { "hash" : BinData(0,"okKHD0QuzcpbVQg7mP2YFw6lM04="), "keyId" : NumberLong("6488693018630029321") } }, "operationTime" : Timestamp(1510767081, 1) }