moveChunk
定义
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
字符串
数据段的目标分片的名称。
布尔
_secondaryThrottle
布尔
可选。默认值为
false
。如果
true
,则默认情况下,数据段迁移期间的每个文档移动都会传播到至少一个从节点,然后负载均衡器才会继续处理下一个文档。 这相当于 写关注(write{ w: 2 }
concern)的。使用
writeConcern
选项指定不同的写关注(write concern)。如果为
false
,负载均衡器不会等待复制到从节点,而是继续处理下一个文档。
有关更多信息,请参阅辅助限制。
writeConcern
文档
如果
_secondaryThrottle
是true
,则为必填项。包含写关注(write concern)的文档,
_secondaryThrottle
在数据段迁移期间使用该写关注来等待从数据块。如果
_secondaryThrottle
为false
,则忽略writeConcern
字段。_waitForDelete
布尔
可选。用于测试目的的内部选项。默认值为
false
。如果设立为true
,则moveChunk
操作的删除阶段会阻塞。要学习;了解数据段如何在分片之间移动,请参阅数据段迁移。
兼容性
此命令可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
重要
无服务器实例不支持此命令。 有关更多信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
Considerations
仅在特殊情况下使用moveChunk
,例如为初始数据摄取或大批量导入操作准备分片集群。 在大多数情况下,允许负载均衡器在分片集群中创建和均衡数据段。 有关更多信息,请参阅在分片集群中创建数据段。
行为
索引
moveChunk
要求所有索引都存在于目标上(即 to
)分片,如果所需的索引不存在,则返回错误。
元数据错误
moveChunk
如果正在对chunks
集合执行另一个元数据操作, 将返回以下错误消息:
errmsg: "The collection's metadata lock is already taken."
如果另一个进程(例如负载均衡器进程)在moveChunk
运行时更改元数据,则可能会看到此错误。 您可以重试moveChunk
操作,不会产生副作用。
maxCatchUpPercentageBeforeBlockingWrites
服务器参数
从 MongoDB 5.0开始,您可以设置maxCatchUpPercentageBeforeBlockingWrites
,以指定在moveChunk
操作期间,与正在传输的数据段总大小(以 MB 为单位)相比,尚未迁移的数据的最大允许百分比。