On this page
Clear jumbo Flag
On this page
If MongoDB cannot split a chunk that exceeds the specified chunk size, MongoDB labels the chunk as jumbo.
If the chunk size no longer exceeds the specified chunk size, MongoDB clears the jumbo
flag for the chunk when the mongos
rewrites the chunk metadata.
In cases where you need to clear the flag manually, the following procedures outline the steps to manually clear the jumbo
flag.
Procedures
Divisible Chunks
The preferred way to clear the jumbo
flag from a chunk is to attempt to split the chunk. If the chunk is divisible, MongoDB removes the flag upon successful split of the chunk.
Find the jumbo
Chunk.
Run sh.status(true)
to find the chunk labeled jumbo
.
sh.status(true)
For example, the following output from sh.status(true) shows that chunk with shard key range { "x" : 2 } -->> { "x" : 4 }
is jumbo
.
--- Sharding Status ---
sharding version: {
...
}
shards:
...
databases:
...
test.foo
shard key: { "x" : 1 }
chunks:
shard-b 2
shard-a 2
{ "x" : { "$minKey" : 1 } } -->> { "x" : 1 } on : shard-b Timestamp(2, 0)
{ "x" : 1 } -->> { "x" : 2 } on : shard-a Timestamp(3, 1)
{ "x" : 2 } -->> { "x" : 4 } on : shard-a Timestamp(2, 2) jumbo
{ "x" : 4 } -->> { "x" : { "$maxKey" : 1 } } on : shard-b Timestamp(3, 0)
Split the jumbo
Chunk.
Use either sh.splitAt()
or sh.splitFind()
to split the jumbo
chunk.
sh.splitAt( "test.foo", { x: 3 })
MongoDB removes the jumbo
flag upon successful split of the chunk.
Indivisible Chunks
In some instances, MongoDB cannot split the no-longer jumbo
chunk, such as a chunk with a range of single shard key value, and the preferred method to clear the flag is not applicable. In such cases, you can clear the flag using the following steps.
Important
Only use this method if the preferred method is not applicable.
Before modifying the config database, always back up the config database.
If you clear the jumbo
flag for a chunk that still exceeds the chunk size, MongoDB will re-label the chunk as jumbo
when MongoDB tries to move the chunk.
Stop the balancer.
Disable the cluster balancer process temporarily, following the steps outlined in Disable the Balancer.
Find the jumbo
Chunk.
Run sh.status(true)
to find the chunk labeled jumbo
.
sh.status(true)
For example, the following output from sh.status(true) shows that chunk with shard key range { "x" : 2 } -->> { "x" : 3 }
is jumbo
.
--- Sharding Status ---
sharding version: {
...
}
shards:
...
databases:
...
test.foo
shard key: { "x" : 1 }
chunks:
shard-b 2
shard-a 2
{ "x" : { "$minKey" : 1 } } -->> { "x" : 1 } on : shard-b Timestamp(2, 0)
{ "x" : 1 } -->> { "x" : 2 } on : shard-a Timestamp(3, 1)
{ "x" : 2 } -->> { "x" : 3 } on : shard-a Timestamp(2, 2) jumbo
{ "x" : 3 } -->> { "x" : { "$maxKey" : 1 } } on : shard-b Timestamp(3, 0)
Clear the cached routing information.
After the jumbo flag has been cleared out from the chunks
collection, update the cluster routing metadata cache.
Starting in MongoDB 3.6.11, you must flush the cache on the config server primary for the namespace. This notifies the balancer of the jumbo flag clearance.
In earlier versions (MongoDB 3.4-series, MongoDB 3.6.0-3.6.10), you must step down the config server primary.
- Starting in MongoDB 3.6.11
-
Connect a
mongo
shell to the config server primary and runflushRouterConfig
for the collection:db.adminCommand( { flushRouterConfig: "test.foo" } )
- In earlier versions (MongoDB 3.4-series, MongoDB 3.6.0-3.6.10)
- Step down the config server primary to clear the routing metadata cache from the config servers.