Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

mergeChunks

項目一覧

  • 定義
  • 互換性
  • 構文
  • コマンドフィールド
  • アクセス制御
  • 動作
  • メッセージを返す
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> }
]
}
)

このコマンドは、次のフィールドを使用します。

フィールド
タイプ
説明
mergeChunks
namespace
両方の チャンク が存在する コレクション の完全修飾 名前空間 。名前空間は<database>.<collection>の形式をとります。
bounds
配列
新しい チャンク の最小キー値と最大キー値を含む配列。

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

戻る

moveRange