Странная операция в выводе db.currentOp () в MongoDB - PullRequest
0 голосов
/ 06 мая 2020

Сразу после запуска моего сервера MongoDB (автономный экземпляр, версия 4.2.2), если я запускаю db.currentOp(), я вижу эту операцию:

    {
        "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" : {

        }
    }

Кажется, что эта операция всегда существует, независимо от того, как долго это проходит. Вдобавок, в некоторых аспектах это странная операция:

  • У нее очень лог opid число (2)
  • Это op это "none"
  • У него нет обычных параметров secs_running или microsecs_running
  • В некоторых литералах упоминается «большинство», но я использую не набор реплик, а отдельный экземпляр

Думаю, это должна быть какая-то внутренняя операция (может быть, своего рода «ожидающий поток»?), Но я не нашел документации по этому поводу в документации по команде currentOp .

Кто-нибудь знает об этой операции и / или мог бы указать документацию, где она описана, пожалуйста? Заранее спасибо!

1 Ответ

1 голос
/ 06 мая 2020

Ожидается мажоритарная услуга здесь . Глядя на историю этого файла, похоже, что он был добавлен в рамках работы над улучшением производительности запуска .

Читая описание заявки, кажется, что во время запуска может потребоваться несколько операций дождаться фиксации большинства. Раньше каждый мог создавать отдельный поток для ожидания; с сервисом ожидания большинства существует только один поток, который ожидает самой последней требуемой фиксации.

Следовательно:

Это операция «нет»

Поток не выполняет операцию , как определено в документации .

У него очень логарифмический номер идентификатора (2)

Это связано с тем, что этот поток запускается при запуске сервера.

В некоторых литералах упоминается «большинство», но я использую не набор реплик, а автономный экземпляр

Можно указать mongod работать в режиме набора реплик и указать его в каталоге данных, созданном автономным узлом, и наоборот. В этих случаях вы, вероятно, ожидаете, что процесс сохранит информацию, уже находящуюся в базе данных, например, транзакции, которые ожидаются (или должны быть прерваны). Следовательно, процедура запуска может выполнять операции, интуитивно не подпадающие под запрошенный режим работы.

...