Definición
defaultMaxTimeMSNuevo en la versión 8.0.
Especifica un lÃmite de tiempo predeterminado para todo el clúster, en milisegundos, para que se complete cada operación de lectura individual. Si una query especifica una
maxTimeMS()opción, ese valor anula el valordefaultMaxTimeMS.defaultMaxTimeMSse aplica a las siguientes operaciones de lectura:
Control de acceso
Para modificar los parámetros del clúster, se debe autenticar como un usuario que tenga uno de los siguientes roles:
Sintaxis
Para configurar defaultMaxTimeMS para su implementación, ejecute el siguiente comando en la base de datos de admin:
db.adminCommand( { setClusterParameter: { defaultMaxTimeMS: { readOperations: <value> } } } )
Para ver el valor actual de defaultMaxTimeMS, ejecuta el siguiente comando en la base de datos admin:
db.adminCommand( { getClusterParameter: "defaultMaxTimeMS" } )
Comportamiento
Por defecto, defaultMaxTimeMS.readOperations es 0, lo que significa que no se establece un tiempo de espera predeterminado para la query. Si no hay un tiempo de espera de query predeterminado, la query se ejecuta hasta que se devuelva un resultado o se produzca un error.
Si una query especifica una opción maxTimeMS(), ese valor sobrescribe el valor defaultMaxTimeMS.
Nota
defaultMaxTimeMS se aplica solo a operaciones de lectura.
Las agregaciones que incluyen las etapas $out o $merge realizan operaciones de guardar, por lo que no están sujetas a defaultMaxTimeMS. Un valor de maxTimeMS() todavÃa se aplica a esas agregaciones.
Consultas de larga duración
Si tu implementación necesita ejecutar long queries, como nodos de análisis, debes especificar un tiempo de espera para dichas queries a nivel de operación utilizando maxTimeMS(). Si no especificas un tiempo de espera de operación, esas consultas utilizan el tiempo de espera de defaultMaxTimeMS, y no se ejecutarán durante el tiempo necesario.
Ejemplo
El siguiente comando establece el tiempo de espera por defecto de la query en 5000 milisegundos:
db.runCommand( { setClusterParameter: { defaultMaxTimeMS: { readOperations: 5000 } } } )
Para comprobar el valor de defaultMaxTimeMS, ejecute el siguiente comando:
db.adminCommand( { getClusterParameter: "defaultMaxTimeMS" } )
{ "clusterParameters" : [ { "_id" : "defaultMaxTimeMS", "clusterParameterTime" : Timestamp(1711564868, 17), "readOperations" : Long(5000) } ], "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1712161244, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : Long(0) } }, "operationTime" : Timestamp(1712161244, 1) }
Resultados
Después de configurar defaultMaxTimeMS para tu implementación, considera estas consultas:
db.test.find( { name: "Carol" } ) db.test.find( { name: "Carol" } ).maxTimeMS( 8000 )
La primera query utiliza el valor defaultMaxTimeMS de 5,000 milisegundos.
La segunda consulta especifica maxTimeMS(), que sobrescribe el defaultMaxTimeMS y provoca que la consulta agote el tiempo de espera después de 8,000 milisegundos.