Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

moveChunk

在此页面上

  • 定义
  • 兼容性
  • Considerations
  • 行为
moveChunk

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

提示

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

字符串

数据块 所在 collection的 命名空间 。指定集合的完整命名空间,包括数据库名称。

find

文档

分片键的等值匹配,用于指定要移动的数据段的分片键值。 指定bounds字段或find字段,但不能同时指定两者。 请勿使用find字段来选择使用哈希分片键的集合中的数据段。

bounds

阵列

要移动的特定数据块的边界。该数组必须由两个文档组成,这两个文档指定要移动的数据段的下分片键值和上分片键值。 指定bounds字段或find字段,但不能同时指定两者。 使用bounds选择使用哈希分片键的collection中的数据块。

bounds的值采用以下形式:

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

to

字符串

数据段的目标分片的名称。

布尔

可选。 一个标志,用于确定该命令是否可以移动过大而无法迁移的数据块。该数据段可能会也可能不会标记为jumbo。

  • 如果为true ,则该命令可以移动数据块。

  • 如果为false ,则该命令无法移动数据块。

默认为 false

警告:

附带 forceJumbo=truemoveChunk 命令会阻止集合上的写入操作。

此选项会导致分分片迁移数据段,即使数据段大于配置的数据数据块大小。在迁移期间,该集合仍然不可写入。

要在没有这么长的阻塞期的情况下迁移这些大数据段,请参阅平衡超过大小限制的数据段。

_secondaryThrottle

布尔

可选。默认值为 false

  • 如果true ,则默认情况下,数据段迁移期间的每个文档移动都会传播到至少一个从节点,然后负载均衡器才会继续处理下一个文档。 这相当于 写关注(write{ w: 2 } concern)的。

    使用writeConcern选项指定不同的写关注(write concern)。

  • 如果为false ,负载均衡器不会等待复制到从节点,而是继续处理下一个文档。

有关更多信息,请参阅辅助限制。

writeConcern

文档

如果 _secondaryThrottletrue,则为必填项。

包含写关注(write concern)的文档, _secondaryThrottle在数据段迁移期间使用该写关注来等待从数据块。

如果_secondaryThrottlefalse ,则忽略writeConcern字段。

_waitForDelete

布尔

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

要学习;了解数据段如何在分片之间移动,请参阅数据段迁移。

提示

另请参阅:

此命令可用于以下环境中托管的部署:

重要

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

仅在特殊情况下使用moveChunk ,例如为初始数据摄取或大批量导入操作准备分片集群。 在大多数情况下,允许负载均衡器在分片集群中创建和均衡数据段。 有关更多信息,请参阅在分片集群中创建数据段。

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

moveChunk如果正在对chunks 集合执行另一个元数据操作, 将返回以下错误消息:

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

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

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

后退

列出分片