Should I disable MongoDB balancer to prevent moveChunk to block database due to "W" lock In my team, we have a MongoDB 3.6 with 4 shard cluster.
My teammate built up Ops Manager and we found out at some point the queries are slow and they are all waiting for database level lock.
    &quot;Database&quot;: {
      &quot;acquireCount&quot;: {
        &quot;w&quot;: 1
      },
      &quot;acquireWaitCount&quot;: {
        &quot;w&quot;: 1
      },
      &quot;timeAcquiringMicros&quot;: {
        &quot;w&quot;: 5383162
      }
    },

Dig inside and we found out the MongoDB was moving chunk and command require &quot;W&quot; exclusive lock at database level.
We feel quite confusing because

We use hashed _id for shard key, which should be distributed evenly and every document size are quite the same.  Is there any way to find out why MongoDB trigger moveChunk? Or any statistics for me to dig inside ?
List all the slow query, Ops Manager didn't record the moveChunk command as slow query. How should I change my config or anything I should try ?
Based on my case, should I try to disable balancer to prevent moveChunk and observe by myself ?


[Updated].
Here is the query which is lock on database &quot;W&quot; lock.
{
            &quot;host&quot; : &quot;....&quot;, 
            &quot;desc&quot; : &quot;migrateThread&quot;, 
            &quot;active&quot; : true, 
            &quot;currentOpTime&quot; : &quot;2020-08-31T06:34:34.194+0000&quot;, 
            &quot;opid&quot; : &quot;sh1:-472303473&quot;, 
            &quot;secs_running&quot; : 15, 
            &quot;microsecs_running&quot; : 15562026, 
            &quot;op&quot; : &quot;none&quot;, 
            &quot;ns&quot; : &quot;collection&quot;, 
            &quot;command&quot; : {
            }, 
            &quot;msg&quot; : &quot;step 2 of 6&quot;, 
            &quot;numYields&quot; : 0.0, 
            &quot;locks&quot; : {
            }, 
            &quot;waitingForLock&quot; : false, 
            &quot;lockStats&quot; : {
                &quot;Global&quot; : {
                    &quot;acquireCount&quot; : {
                        &quot;r&quot; : 4, 
                        &quot;w&quot; : 4
                    }
                }, 
                &quot;Database&quot; : {
                    &quot;acquireCount&quot; : {
                        &quot;w&quot; : 3, 
                        &quot;W&quot; : 1
                    }, 
                    &quot;acquireWaitCount&quot; : {
                        &quot;W&quot; : 1
                    }, 
                    &quot;timeAcquiringMicros&quot; : {
                        &quot;W&quot; : 15665
                    }
                }, 
                &quot;Collection&quot; : {
                    &quot;acquireCount&quot; : {
                        &quot;w&quot; : 2, 
                        &quot;W&quot; : 1
                    }, 
                    &quot;acquireWaitCount&quot; : {
                        &quot;W&quot; : 1
                    }, 
                    &quot;timeAcquiringMicros&quot; : {
                        &quot;W&quot; : 7247
                    }
                }
            }
        }

Thanks
To see your &quot;real&quot; chunk distribution count between shards, use command sh.status() at mongos.
As you know, result should show that every shard have more or less same amount of chunks.
Yes, you can disable the balancer and if you really use hashed sharding key, end result should be same as if you keep balancer running. Check that sh.status() carefully, I think that you have there something else sharded too, something what don't use hashed sharding key.
On case when movechunks happen even you have hashed shardingkey is of course situtation where you have added new shard to the cluster. That new shard is empty and system starts to fill it.