定義
mergeChunksシャーディングされたコレクションの場合、
mergeChunksはシャード上の連続するチャンク範囲を 1 つのチャンクに結合します。mergeChunksadminインスタンスから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" : Long("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" : Long("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" : Long("6488693018630029321") } }, "operationTime" : Timestamp(1510767081, 1) }