Definition
moveChunkInternal administrative command. Moves chunks between shards. Issue the
moveChunkcommand via amongosinstance while using the admin database. Use the following forms:Tip
In the
mongoShell, this command can also be run through thesh.moveChunk()helper method.Helper methods are convenient for
mongousers, but they may not return the same level of information as database commands. In cases where the convenience is not needed or the additional return fields are required, use the database command.db.adminCommand( { moveChunk: <namespace>, find: <query>, to: <string>, forceJumbo: <boolean>, // Starting in MongoDB 4.4 _secondaryThrottle: <boolean>, writeConcern: <document>, _waitForDelete: <boolean> } ) Alternatively:
db.adminCommand( { moveChunk: <namespace>, bounds: <array>, to: <string>, forceJumbo: <boolean>, // Starting in MongoDB 4.4 _secondaryThrottle: <boolean>, writeConcern: <document>, _waitForDelete: <boolean> } ) The
moveChunkcommand has the following fields:FieldTypeDescriptionmoveChunkstring
The namespace of the collection where the chunk exists. Specify the collection's full namespace, including the database name.
finddocument
An equality match on the shard key that specifies the shard-key value of the chunk to move. Specify either the
boundsfield or thefindfield but not both. Do not use thefindfield to select chunks in collections that use a hashed shard key.boundsarray
The bounds of a specific chunk to move. The array must consist of two documents that specify the lower and upper shard key values of a chunk to move. Specify either the
boundsfield or thefindfield but not both. Useboundsto select chunks in collections that use a hashed shard key.The value of
boundstakes the following form:[ { hashedField : <minValue> } , { hashedField : <maxValue> } ] tostring
The name of the destination shard for the chunk.
forceJumboboolean
Optional. A flag that determines if the command can move a chunk that is too large to migrate. The chunk may or may not be labeled as jumbo.
If
true, the command can move the chunk.If
false, the command cannot move the chunk.
The default is
false.Warning
When you run
moveChunkwith forceJumbo: true, write operations to the collection may block for a long period of time during the migration. To migrate these large chunks without this long blocking period, see Balance Chunks that Exceed Size Limit instead.New in version 4.4.
_secondaryThrottleboolean
Optional. Default is
false.If
true, then each document moved during chunk migration propagates to secondary members according to the write concern specified in thewriteConcernfield before the balancer proceeds with the next document.If
_secondaryThrottleistrue, you must also specify thewriteConcernfield.If
false, the balancer does not wait for replication to a secondary and instead continues with the next document.
For more information, see Secondary Throttle.
writeConcerndocument
Required if
_secondaryThrottleistrue.A document containing the write concern that the
_secondaryThrottleuses to wait for secondaries during the chunk migration.If
_secondaryThrottleisfalse, thewriteConcernfield is ignored._waitForDeleteboolean
Optional. Internal option for testing purposes. The default is
false. If set totrue, the delete phase of amoveChunkoperation blocks.To learn how chunks move between shards, see Chunk Migration.
Considerations
Only use the moveChunk in special circumstances
such as preparing your sharded cluster for an initial
ingestion of data, or a large bulk import operation. In most cases
allow the balancer to create and balance chunks in sharded clusters.
See Create Chunks in a Sharded Cluster for more information.
Behavior
Indexes
moveChunk requires that all indexes exist on the
target (i.e. to ) shard before migration and returns an error if a
required index does not exist.
Meta Data Error
moveChunk returns the following error message if another
metadata operation is in progress on the chunks collection:
errmsg: "The collection's metadata lock is already taken."
If another process, such as a balancer process, changes meta data
while moveChunk is running, you may see this
error. You may retry the moveChunk operation without
side effects.
maxCatchUpPercentageBeforeBlockingWrites Server Parameter
Starting in MongoDB 4.4.7 (and 4.2.15, 4.0.26), you can set the
maxCatchUpPercentageBeforeBlockingWrites to specify the
maximum allowed percentage of data not yet migrated
during a moveChunk operation when compared to the
total size (in MBs) of the chunk being transferred.