defaultMaxTimeMS
Definition
defaultMaxTimeMS
New in version 8.0.
Available for both
mongod
andmongos
.Specifies a default time limit in milliseconds for individual read operations to complete. If a query specifies a
maxTimeMS()
option, that value overrides thedefaultMaxTimeMS
value.defaultMaxTimeMS
applies to the following read operations:
Access Control
To modify cluster parameters, you must authenticate as a user that has one of the following roles:
Syntax
To set defaultMaxTimeMS
for your deployment, run the following command on
the admin
database:
db.adminCommand( { setClusterParameter: { defaultMaxTimeMS: { readOperations: <value> } } } )
To view the current value for defaultMaxTimeMS
, run the following
command on the admin
database:
db.adminCommand( { getClusterParameter: "defaultMaxTimeMS" } )
Behavior
By default, defaultMaxTimeMS.readOperations
is 0, meaning no default
query timeout is set. If there is no default query timeout, the query
runs until it either returns a result or fails.
If a query specifies a maxTimeMS()
option, that value
overrides the defaultMaxTimeMS
value.
Long-Running Queries
If your deployment needs to run long queries, such as analytics
node queries, you must specify a timeout for
those queries at the operation level using
maxTimeMS()
. If you don't specify an operation
timeout, those queries use the defaultMaxTimeMS
timeout, and won't
run for the required amount of time.
Example
The following command sets the default query timeout 5000
milliseconds:
db.runCommand( { setClusterParameter: { defaultMaxTimeMS: { readOperations: 5000 } } } )
To check the value of defaultMaxTimeMS
, run the following command:
db.adminCommand( { getClusterParameter: "defaultMaxTimeMS" } )
{ "clusterParameters" : [ { "_id" : "defaultMaxTimeMS", "clusterParameterTime" : Timestamp(1711564868, 17), "readOperations" : NumberLong(5000) } ], "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1712161244, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } }, "operationTime" : Timestamp(1712161244, 1) }
Results
After you set defaultMaxTimeMS
for your deployment, consider these
queries:
db.test.find( { name: "Carol" } ) db.test.find( { name: "Carol" } ).maxTimeMS( 8000 )
The first query uses the defaultMaxTimeMS
value of 5,000
milliseconds.
The second query specifies maxTimeMS()
, which
overrides the defaultMaxTimeMS
and causes the query to timeout after
8,000 milliseconds.