On this page
moveChunk
在本页面
Definition
moveChunk
- 内部 Management 命令。在shards之间移动chunks。使用admin database时,通过mongos实例发出moveChunk命令。使用以下形式:
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所在的collection的namespace。指定集合的完整名称空间,包括数据库名称。 |
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 上的块之间的块如何移动。
See also
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操作,而不会产生副作用。