Question

Est-il possible de trouver des requêtes dans la system.profile-Collection d'un MongoDB-base de données qui n'a pas fini à cause d'un dépassement de délai?

J'ai trouvé certaines requêtes qui a couru plus longtemps que la durée spécifiée dans $maxTimeMS.

db.coll.find(
  { millis: {$gt: 1300}, "command.maxTimeMS": NumberLong(1300) },
  {millis: 1}
).sort(
  {millis: -1}
)

Mais ils ne s'exécutaient quelques millisecondes plus, et n'ont pas un champ error ou timeout. Existe-il des champs qui indiquent un délai d'attente?

Était-ce utile?

La solution

Sur un assez vaste ensemble de données, j'ai testé une requête qui s'éteint après 10 secondes:

db.collection.find({"foo": "bar"}).maxTimeMS(10000)

(Dans mon cas, la collection a > 100 GB de données et pas d'index sur le champ foo).J'ai cherché la requête à l'aide de:

db.system.profile.find({"query.query" : { "foo" : "bar" }}).limit(5).sort({ts: -1}).pretty()

et a constaté que les champs exception et exceptionCode sont remplies:

"exception" : "operation exceeded time limit",
"exceptionCode" : 50,

Donc, à la recherche pour le champ exception devrait vous donner le résultat souhaité:

db.system.profile.find({ "exception" : { "$exists" : 1 } }).limit(5).sort({ts: -1}).pretty()

Et si vous l'avez explicitement look pour les requêtes qui est venu à expiration, essayez:

db.system.profile.find( {"exceptionCode": 50} ).sort( {ts: -1} ).pretty()

Autres conseils

MongoDB cibles des opérations de résiliation si le curseur dépasse ses limites du temps imparti(maxTimeMS).Je crois que le peu de millis plus venir de deux choses.

1) Il devrait y avoir un processus interne qui vérifie périodiquement de façon à obtenir l'intervalle de vérification, les frais généraux (par exemple toutes les 1ms)

2) MongoDB met fin à des opérations qui dépassent les limites du temps imparti, en utilisant le même mécanisme que db.killOp().MongoDB ne prend fin qu'à une opération à l'un de ses désigné interrompre points.Pour atteindre le point d'interruption, il pourrait prendre quelques millis.

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top