MongoDB中db.currentOp()输出中的异常操作



在启动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_runningmicrosecs_running参数
  • 它在一些文字中提到了"多数",但我运行的不是复制集,而是一个独立的实例

我想这应该是某种内部操作(可能是一种"等待线程"?(,但我在currentOp命令文档中没有找到有关它的文档。

有人知道这个操作吗?和/或可以指出描述它的文档吗?提前感谢!

此处定义了等待多数服务。查看此文件的历史记录,它似乎是作为提高启动性能的工作的一部分添加的。

阅读票证描述,似乎在启动期间,多个操作可能需要等待多数提交。以前,每个线程都可能创建了一个单独的线程来等待;对于多数等待服务,只有一个线程在等待最近所需的提交。

因此:

它的操作是"无">

线程没有执行文档中定义的操作。

它有一个非常日志的opid编号(2(

这是因为此线程是在服务器启动时启动的。

它在一些文字中提到了"多数",但我运行的不是副本集,而是一个独立的实例

可以指示mongod以副本集模式运行,并将其指向由独立节点创建的数据目录,反之亦然。在这些情况下,您可能希望流程保留数据库中已有的信息,例如挂起(或需要中止(的事务。因此,启动过程可以执行不直观地落在所请求的操作模式下的操作。

最新更新