mergeChunks

在本页面

Definition

Syntax

mergeChunks的格式如下:

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

Command Fields

mergeChunks命令具有以下字段:

Field Type Description
mergeChunks namespace 两个chunks都存在的collection中的完全合格的namespace。命名空间采用<database>.<collection>的形式。
bounds array 包含新块的最小和最大键值的数组。

Access Control

在以authorization运行的部署中,用户必须具有包括以下特权的访问权限:

内置角色clusterManager提供所需的特权。

Behavior

Note

仅在特殊情况下使用mergeChunks。例如,在删除许多文档后清理sharded cluster时。

为了成功合并块,以下必须为真:

如果不满足这些条件,mergeChunks将返回错误。

Return Messages

成功后,mergeChunks返回到以下文档:

{
  "ok" : 1,
  "$clusterTime" : {
     "clusterTime" : Timestamp(1510767081, 1),
     "signature" : {
         "hash" : BinData(0,"okKHD0QuzcpbVQg7mP2YFw6lM04="),
         "keyId" : NumberLong("6488693018630029321")
      }
  },
  "operationTime" : Timestamp(1510767081, 1)
}

正在进行另一项操作

如果在chunks集合上正在进行其他元数据操作,则mergeChunks返回以下错误消息:

errmsg: "The collection's metadata lock is already taken."

如果另一个进程(例如 balancer 进程)在mergeChunks运行时更改了元数据,则可能会看到此错误。您可以重试mergeChunks操作,而不会产生副作用。

不同碎片上的块

如果 Importingchunks不在同一shard上,则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)
}

Noncontiguous Chunks

如果 Importingchunks不连续,则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)

}
首页