在启动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命令文档中没有找到有关它的文档。
有人知道这个操作吗?和/或可以指出描述它的文档吗?提前感谢!
此处定义了等待多数服务。查看此文件的历史记录,它似乎是作为提高启动性能的工作的一部分添加的。
阅读票证描述,似乎在启动期间,多个操作可能需要等待多数提交。以前,每个线程都可能创建了一个单独的线程来等待;对于多数等待服务,只有一个线程在等待最近所需的提交。
因此:
它的操作是"无">
线程没有执行文档中定义的操作。
它有一个非常日志的opid编号(2(
这是因为此线程是在服务器启动时启动的。
它在一些文字中提到了"多数",但我运行的不是副本集,而是一个独立的实例
可以指示mongod
以副本集模式运行,并将其指向由独立节点创建的数据目录,反之亦然。在这些情况下,您可能希望流程保留数据库中已有的信息,例如挂起(或需要中止(的事务。因此,启动过程可以执行不直观地落在所请求的操作模式下的操作。