2 votes

Opération étrange dans la sortie db.currentOp () dans MongoDB

Tout juste après avoir démarré mon serveur MongoDB (instance autonome, version 4.2.2) si je lance db.currentOp() je vois cette opération:

    {
        "type" : "op",
        "host" : "menzo:27017",
        "desc" : "waitForMajority",
        "active" : true,
        "currentOpTime" : "2020-05-06T16:16:33.077+0200",
        "opid" : 2,
        "op" : "none",
        "ns" : "",
        "command" : {

        },
        "numYields" : 0,
        "waitingForLatch" : {
            "timestamp" : ISODate("2020-05-06T14:02:55.895Z"),
            "captureName" : "WaitForMaorityService::_mutex"
        },
        "locks" : {

        },
        "waitingForLock" : false,
        "lockStats" : {

        },
        "waitingForFlowControl" : false,
        "flowControlStats" : {

        }
    }

Il semble que cette opération est toujours là, peu importe le temps écoulé. De plus, c'est une opération étrange à certains égards:

  • Elle a un très grand numéro de opid (2)
  • Son op est "none"
  • Elle n'a pas les paramètres habituels secs_running ou microsecs_running
  • Elle mentionne "majority" dans certains littéraux, mais je n'utilise pas un ensemble de réplicas mais une instance autonome

Je suppose que cela devrait être une sorte d'opération interne (peut-être une sorte de "thread d'attente"?) mais je n'ai pas trouvé de documentation à ce sujet dans la documentation de la commande currentOp.

Est-ce que quelqu'un sait à propos de cette opération et/ou pourrait indiquer une documentation où elle est décrite, s'il vous plaît? Merci d'avance!

5voto

D. SM Points 10035

Attendre que le service de majorité soit défini ici. En regardant l'historique de ce fichier, il semble avoir été ajouté dans le cadre du travail sur l'amélioration des performances de démarrage.

En lisant la description du ticket, il semble qu'au démarrage, plusieurs opérations peuvent avoir besoin d'attendre un commit de majorité. Auparavant, chacune pouvait créer un thread séparé pour l'attente; avec le service d'attente de majorité, il n'y a qu'un seul thread qui attend le commit requis le plus récent.

Par conséquent:

Son opération est "aucune"

Le thread ne réalise pas une opération comme défini dans la documentation.

Il a un numéro d'opid très élevé (2)

Cela est dû au fait que ce thread est démarré lorsque le serveur démarre.

Il mentionne "majority" dans certaines littérales, mais je n'utilise pas un ensemble de réplicas mais une instance autonome

Il est possible d'instruire mongod pour fonctionner en mode ensemble de réplicas et de le diriger vers un répertoire de données créé par un nœud autonome, et vice versa. Dans ces cas, on s'attend probablement à ce que le processus conserve les informations déjà présentes dans la base de données, telles que les transactions en attente (ou devant être annulées). Par conséquent, la procédure de démarrage peut effectuer des opérations ne correspondant pas intuitivement au mode d'opération demandé.

0 votes

Merci pour la réponse! Parcourir le code source de MongoDB pour trouver la solution était un peu en dehors de l'objectif de mes recherches ;)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X