美文网首页
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