美文网首页
MongoDB serverStatus执行结果差异(mongo

MongoDB serverStatus执行结果差异(mongo

作者: rickif | 来源:发表于2019-05-06 20:50 被阅读0次

       serverStatus命令可以返回mongoDB数据库服务进程的运行状态。
用户可以直接通过db.runCommand({serverStatus:1})的方式直接调用命令,也可以调用db.serverStatus()这样的wrapper来更方便地获取相关信息。
       在mongos、mongod等不同的节点上执行serverStatus命令,返回的结果含意有略微的差别,在实际使用过程中容易造成误导。这里结合具体的源码,讨论serverStatus命令的具体执行过程,梳理具体的执行结果的含意。

serverStatus实现原理

serverStatus.png

       与大部分mongoDB提供的命令一样,cmdServerStatus实现了Command虚基类,注册对应的command(如serverStatus、find、count等)到全局(静态)的commandMap中。serverStatus命令的返回结果包含了进程pid、启动时间、操作数统计等诸多数据。对于较为复杂的数据,诸如操作数统计opCounter、连接connection等数据计算方法以称为ServerStatusSection的单元形式注册到静态的sectionMap中,从而在调用继承自基类的run()时,调用相应的数据计算函数。较为简单的例如进程pid、机器host之类的信息则直接在run()中直接计算。

OpCounters.png

       mongod进程申明了一个全局的globalOpCounters,保存了db的操作数信息。其中,_getMore参数表示在游标迭代过程中的getMore操作的数量。_command参数表示除去insert、update、delete的命令数的统计值。所有的统计值都是存储在运行进程的内存中的,所以只会统计自进程启动以来的命令数。

       通过客户端直接登录副本集或分片的mongod节点,执行serverStatus命令返回的是对应mongod进程的OpCounter信息。

       对于分片集实例,通常我们会登录到mongos上执行命令。在mongos上执行serverStatus命令,获取到的值是mongos上保存的值。对于有多个mongos的mongoDB实例,如果需要统计OpCounter信息,需要累计多个mongos上的数据。

相关文章

网友评论

      本文标题:MongoDB serverStatus执行结果差异(mongo

      本文链接:https://www.haomeiwen.com/subject/tqaxoqtx.html