moveChunk

在本页面

Definition

db.adminCommand( { moveChunk : <namespace> ,
                 find : <query> ,
                 to : <string>,
                 _secondaryThrottle : <boolean>,
                 writeConcern: <document>,
                 _waitForDelete : <boolean> } )

Alternatively:

db.adminCommand( { moveChunk : <namespace> ,
                 bounds : <array> ,
                 to : <string>,
                 _secondaryThrottle : <boolean>,
                 writeConcern: <document>,
                 _waitForDelete : <boolean> } )

moveChunk命令具有以下字段:

Field Type Description
moveChunk string chunk所在的collectionnamespace。指定集合的完整名称空间,包括数据库名称。
find document 分片键上的相等匹配项,用于指定要移动的块的分片键值。指定bounds字段或find字段,但不能两者都指定。请勿使用find字段来选择使用哈希分片键的集合中的块。
bounds array 要移动的特定块的边界。该数组必须由两个文档组成,这些文档指定要移动的块的上下分片键值。指定bounds字段或find字段,但不能两者都指定。使用bounds选择使用哈希分片键的集合中的块。
to string 块的目标分片的名称。
_secondaryThrottle boolean 可选的。从 MongoDB 3.4 开始,对于WiredTiger,默认为false。对于MMAPv1,默认值为true


如果true,则默认情况下,在块迁移期间移动的每个文档在平衡器 continue 处理下一个文档之前都会传播到至少一个辅助文件夹。这等效于{ w: 2 }的写入关注。
使用writeConcern选项可以指定其他写关注点。
如果为false,则平衡器不 await 复制到辅助文件,而是 continue 下一个文档。
有关更多信息,请参见Secondary Throttle
| writeConcern |文档|可选。表示write concern的文档,_secondaryThrottle将在块迁移期间使用_来 await 次级。
writeConcern要求_secondaryThrottle: true。|
| _waitForDelete |布尔值|可选。用于测试目的的内部选项。默认值为false。如果设置为true,则moveChunk操作的删除阶段会阻塞。

bounds的值采用以下形式:

[ { hashedField : <minValue> } ,
  { hashedField : <maxValue> } ]

chunk migration部分描述了 MongoDB 上的块之间的块如何移动。

Considerations

仅在特殊情况下使用moveChunk,例如为您的sharded cluster准备数据的初始提取或进行大批量导入操作。在大多数情况下,允许平衡器在分片群集中创建和平衡块。有关更多信息,请参见在分片群集中创建块

Behavior

Indexes

在 3.0.0 版中进行了更改:在以前的版本中,moveChunk将在迁移过程中构建索引。

moveChunk要求所有索引都必须存在于迁移之前的目标(即to)分片上,如果所需的索引不存在,则返回错误。

元数据错误

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

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

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

首页