文档菜单
文档首页
/
MongoDB 手册
/ / /

moveChunk

本页面内容

  • 定义
  • 兼容性
  • 注意事项
  • 行为
moveChunk

内部管理命令。在分片之间移动数据块。在使用分片时,通过一个mongos实例发出moveChunk命令,并使用管理数据库。使用以下形式

提示

mongosh中,此命令也可以通过sh.moveChunk()辅助方法运行.

辅助方法对于mongosh用户来说很方便,但它们可能不会返回与数据库命令相同级别的信息。在不需要便利性或需要额外的返回字段的情况下,请使用数据库命令。

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

或者

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

moveChunk 命令具有以下字段

字段
类型
描述
moveChunk
string
存在 命名空间集合,其中包含要移动的 数据分片。指定集合的完整命名空间,包括数据库名称。
find
document
对指定要移动的数据分片 shard-key 值的 shard-key 进行相等匹配。指定 bounds 字段或 find 字段,但不能同时指定两者。不要使用 find 字段来选择使用 哈希分片键 的集合中的数据分片。
bounds
array
要移动的特定数据分片的边界。数组必须包含两个文档,分别指定要移动的数据分片的下界和上界 shard-key 值。指定 bounds 字段或 find 字段,但不能同时指定两者。使用 bounds 来选择使用 哈希分片键 的集合中的数据分片。
to
string
数据分片的目标分片名称。
boolean

可选。一个标志,用于确定是否可以移动一个太大而无法迁移的 数据分片。该数据分片可能或可能不是标记为 大分片

  • 如果设置为 true,则可以移动数据分片。

  • 如果设置为 false,则无法移动数据分片。

默认值为 false

警告

带有 forceJumbo=truemoveChunk 命令将阻止集合上的读写操作。

此选项会导致即使数据分片大于配置的块大小,分片也会迁移数据分片。在迁移期间,集合将不可用。

要避免这种长时间的阻塞期迁移这些大型数据分片,请参阅 平衡超过大小限制的范围

_secondaryThrottle
boolean

可选。对于 WiredTiger,默认为 false

  • 如果设置为 true,则在迁移数据分片期间,每个文档的移动默认至少传播到辅助副本一次,然后平衡器才继续下一个文档。这相当于一个写关注为 { w: 2 } 的写操作。

    使用 writeConcern 选项指定不同的写关注。

  • 如果设置为 false,则平衡器不会等待复制到辅助副本,而是继续下一个文档。

有关更多信息,请参阅 辅助副本节流

writeConcern
document

可选。一个表达 _secondaryThrottle 在块迁移期间等待副本将使用的 写关注 的文档。

writeConcern 需要 _secondaryThrottle: true

_waitForDelete
boolean
可选。用于测试的内部选项。默认为 false。如果设置为 true,则 moveChunk 操作的删除阶段会阻塞。

bounds 的值采用以下形式

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

关于 块迁移 的部分描述了在 MongoDB 中块如何在分片之间移动。

提示

另请参阅

此命令在以下环境中托管的服务器中可用

重要

此命令不支持在无服务器实例中。有关更多信息,请参阅 不受支持的命令。

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

moveChunk 在迁移之前需要在目标(即 to)分片上存在所有索引,如果缺少所需的索引将返回错误。

moveChunkchunks 集合中存在其他元数据操作时,会返回以下错误信息

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

如果其他进程,例如均衡器进程,在 moveChunk 运行时更改元数据,您可能会看到此错误。您可以尝试再次执行 moveChunk 操作,而不会产生副作用。

从 MongoDB 5.0 开始,您可以将 maxCatchUpPercentageBeforeBlockingWrites 设置为在 moveChunk 操作期间,与传输块的总大小(以 MB 为单位)相比,允许的最大未迁移数据百分比。

返回

mergeAllChunksOnShard