zoukankan      html  css  js  c++  java
  • MongoDB分析工具之三:db.currentOp()

    db.currentOp()

    db.currentOp是个好东西,顾名思义,就是当前的操作。在mongodb中可以查看当前数据库上此刻的操作语句信息,包括insert/query/update/remove/getmore/command等多种操作。直接执行

    db.currentOp()一般返回一个空的数组,我们可以指定一个参数true,这样就返回用户connections与系统cmmand相关的操作。下面看个列子:

    db.currentOp(true) 会返回很多信息:

    db.currentOp()

    查看数据库当前执行什么操作。

    用于查看长时间运行进程。

    通过(执行时长、操作、锁、等待锁时长)等条件过滤。

    重点关注以下几个字段:

    字段说明
    client 请求是由哪个客户端发起的。
    opid 操作的opid,有需要的话,可以通过db.killOp(opid) 直接终止该操作。
    secs_running/microsecs_running 这个值重点关注,代表请求运行的时间,如果这个值特别大,请看看请求是否合理。
    query/ns 这个字段能看出是对哪个集合正在执行什么操作。
    lock* - 还有一些跟锁相关的参数,需要了解可以看官网文档,本文不做详细介绍。
    - db.currentOp文档请参见:db.currentOp 

    返回信息:

    {
      "inprog": [
           {
             "host" : <string>,
             "desc" : <string>,
             "connectionId" : <number>,
             "client" : <string>,
             "appName" : <string>,
             "clientMetadata" : <document>,
             "active" : <boolean>,
             "currentOpTime" : <string>,
             "opid" : <number>,
             "secs_running" : <NumberLong()>,
             "microsecs_running" : <number>,
             "op" : <string>,
             "ns" : <string>,
             "command" : <document>,
             "originatingCommand" : <document>,
             "planSummary": <string>,
             "msg": <string>,
             "progress" : {
                 "done" : <number>,
                 "total" : <number>
             },
             "killPending" : <boolean>,
             "numYields" : <number>,
             "locks" : {
                 "Global" : <string>,
                 "MMAPV1Journal" : <string>,
                 "Database" : <string>,
                 "Collection" : <string>,
                 "Metadata" : <string>,
                 "oplog" : <string>
             },
             "waitingForLock" : <boolean>,
             "lockStats" : {
                 "Global": {
                    "acquireCount": {
                       "r": <NumberLong>,
                       "w": <NumberLong>,
                       "R": <NumberLong>,
                       "W": <NumberLong>
                    },
                    "acquireWaitCount": {
                       "r": <NumberLong>,
                       "w": <NumberLong>,
                       "R": <NumberLong>,
                       "W": <NumberLong>
                    },
                    "timeAcquiringMicros" : {
                       "r" : NumberLong(0),
                       "w" : NumberLong(0),
                       "R" : NumberLong(0),
                       "W" : NumberLong(0)
                    },
                    "deadlockCount" : {
                       "r" : NumberLong(0),
                       "w" : NumberLong(0),
                       "R" : NumberLong(0),
                       "W" : NumberLong(0)
                    }
                 },
                 "MMAPV1Journal": {
                    ...
                 },
                 "Database" : {
                    ...
                 },
                 ...
             }
           },
           ...
       ],
       "fsyncLock": <boolean>,
       "info": <string>,
       "ok": 1
    }

    返回字段说明:

    currentOp.host:运行该操作的主机的名称。
    currentOp.desc:客户端的描述。这个字符串包括connectionId。
    currentOp.connectionId:操作起源的连接的标识符。
    currentOp.client:包含有关操作起源的信息的字符串。
    对于多文档事务,客户机存储要在事务中运行操作的最新客户机的信息。
    currentOp.appName:包含发出请求的客户机类型信息的字符串。
    currentOp.clientMetadata:关于客户端的附加信息。
    对于多文档事务,客户机存储要在事务中运行操作的最新客户机的信息。
    currentOp.currentOpTime:操作的开始时间。新版本3.6。
    currentOp.lsid:会话标识符。仅当操作与会话关联时才显示。新版本3.6。
    currentOp.transaction:包含多文档事务信息的文档。仅当操作是事务的一部分时才出现。新版本4.0。
    currentOp.transaction.parameters:包含多文档事务信息的文档。仅当操作是事务的一部分时才出现。新版本4.0。
    currentOp.transaction.parameters.txnNumber:事务数量。仅当操作是事务的一部分时才出现。新版本4.0。
    currentOp.transaction.parameters.autocommit:一个布尔标志,指示事务的自动提交是否打开。仅当操作是事务的一部分时才出现。新版本4.0.2。
    currentOp.transaction.parameters.readConcern:事务的read关注点。多文档事务支持读取关注点“快照”、“本地”和“多数”。仅当操作是事务的一部分时才出现。新版本4.0.2。
    currentOp.transaction.readTimestamp:事务中的操作正在读取快照的时间戳。仅当操作是事务的一部分时才出现。新版本4.0.2。
    currentOp.transaction.startWallClockTime:事务开始的日期和时间(带有时区)。仅当操作是事务的一部分时才出现。新版本4.0.2。
    currentOp.transaction.timeOpenMicros事务的持续时间(以微秒为单位)。添加到timeInactiveMicros的timeActiveMicros值应该等于timeOpenMicros。仅当操作是事务的一部分时才出现。新版本4.0.2。
    currentOp.transaction.timeActiveMicros:交易活动的总时间;例如,当事务运行操作时。添加到timeInactiveMicros的timeActiveMicros值应该等于timeOpenMicros。仅当操作是事务的一部分时才出现。新版本4.0.2。
    currentOp.transaction.timeInactiveMicros:该事务处于非活动状态的总时间;例如,当事务没有运行任何操作时。添加到timeActiveMicros的timeInactiveMicros值应该等于timeOpenMicros。仅当操作是事务的一部分时才出现。
    currentOp.transaction.expiryTime:事务超时并中止的日期和时间(带有时区)。
    currentOp.transaction:呼气时间等于current .transaction。startWallClockTime + transactionLifetimeLimitSeconds。有关更多信息,请参见事务的运行时限制。仅当操作是事务的一部分时才出现。新版本4.0.2。

    currentOp.opid:操作的标识符。您可以将此值传递给mongo shell中的db.killOp()来终止操作。
    警告
    非常谨慎地终止运行操作。只使用db.killOp()终止客户机发起的操作,而不终止内部数据库操作。

    currentOp.active:指定操作是否已启动的布尔值。如果操作已经启动,则值为true;如果操作是空闲的,则值为false,例如空闲连接或当前空闲的内部线程。一个操作可以是活动的,即使该操作已被另一个操作取代。在3.0版本中进行了更改:对于一些非活动的后台线程,例如非活动的signalProcessingThread, MongoDB会抑制各种空字段。
    currentOp.secs_running:操作持续时间(以秒为单位)。MongoDB通过从操作开始时减去当前时间来计算这个值。仅当操作正在运行时才出现;也就是说,如果active为真。
    currentOp.microsecs_running:操作持续时间(以微秒为单位)。MongoDB通过从操作开始时减去当前时间来计算这个值。仅当操作正在运行时才出现;也就是说,如果active为真。
    currentOp.op:标识操作类型的字符串。可能的值是:

    • "none"
    • "update"
    • "insert"
    • "query"
    • "command"
    • "getmore"
    • "remove"
    • "killcursors"

    query”操作包括读取操作。
    command”操作包括大多数命令,如createIndexes和findandmodify。
    在3.0版本中更改:使用insert、update和delete命令的写操作分别为op显示“insert”、“update”和“remove”。以前的版本在“query”操作下包含这些写命令。
    修改版本3.2:大多数命令,包括createIndexes和findandmodify,都为op显示“command”。以前版本的MongoDB在“query”操作下包含了这些命令。
    currentOp.ns:操作目标的命名空间。名称空间由数据库名和集合名组成,集合名与点(.)连接;也就是说,“<数据库>。<收藏>”。
    currentOp.command:在3.6版中进行了更改。包含与此操作关联的完整命令对象的文档。如果命令文件超过1 kb,则文件的形式如下:

    "command" : {
      "$truncated": <string>,
      "comment": <string>
    }


    $truncated字段包含文档的字符串摘要,如果存在,则不包括文档的注释字段。如果摘要仍然超过1 kb,则进一步截断它,用字符串末尾的省略号(…)表示。
    如果将注释传递给操作,则会显示注释字段。
    下面的示例输出包含一个命令对象,用于在一个名为test的数据库中对一个集合的命名项执行查找操作:

    "command" : {
      "find" : "items",
      "filter" : {
        "sku" : 1403978
      },
      "$db" : "test"
    }

    下面的示例输出包含用于getMore操作的命令对象,getMore操作是由一个命令生成的,该命令的游标id为80336119321,用于一个名为test的数据库中的集合命名项:

    "command" : {
      "getMore" : NumberLong("80336119321"),
      "collection" : "items",
      "$db" : "test"
    }

    currentOp.originatingCommand:版本3.6中的更改:对于从游标检索下一批结果的“getmore”操作,originatingCommand字段包含最初创建该游标的完整命令对象(例如find或aggregate)。
    currentOp.planSummary:包含查询计划的字符串,用于帮助调试慢速查询。
    currentOp.client:IP地址(或主机名)和发起操作的客户机连接的临时端口。如果您的inprog数组有来自许多不同客户端的操作,请使用此字符串将操作与客户端关联起来。
    currentOp.appName:新版本3.4。运行该操作的客户机应用程序的标识符。使用appName连接字符串选项为appName字段设置自定义值。
    currentOp.locks:在3.0版本中进行了更改。locks文档报告操作当前持有的锁的类型和模式。可能的锁类型如下:
    锁类型      描述
    Global      表示全局锁。
    MMAPV1Journal  表示用于同步日志写入的MMAPv1存储引擎特定锁;对于非mmapv1存储引擎,MMAPV1Journal的模式为空。
    Database      表示数据库锁。
    Collection    表示集合锁。
    Metadata      表示元数据锁。
    oplog        表示oplog上的锁。
    可能的模式如下:
    锁定模式      描述
    R          表示共享锁。
    W          表示排他(X)锁。
    r          表示共享的意图(IS)锁。
    w          表示意图独占(IX)锁。

    currentOp.msg:msg提供一条消息,描述操作的状态和进度。对于索引或mapReduce操作,字段报告完成百分比。
    currentOp.progress:报告mapReduce或索引操作的进度。进度字段对应于msg字段中的完成百分比。进度说明了以下信息:
    currentOp.progress.done:报告完成的数字。
    currentOp.progress.total:报告总数。
    currentOp.killPending:如果当前操作被标记为要终止,则返回true。当操作遇到下一个安全终止点时,操作将终止。
    currentOp.numYields:numyield是一个计数器,它报告操作已经让步多少次,以允许其他操作完成。
    通常,当需要访问MongoDB尚未完全读入内存的数据时,操作会产生收益。这允许其他在内存中有数据的操作在MongoDB为生成操作读入数据时快速完成。
    currentOp.fsyncLock:指定当前是否锁定fsync写入/快照的数据库。只有锁定时才会出现;例如,如果fsyncLock为真。
    currentOp.info:有关如何从db.fsyncLock()解锁数据库的信息。只有当fsyncLock为真时才会出现。
    currentOp.lockStats:对于每种锁类型和模式(参见currentOp)。),返回以下信息:
    currentOp.lockStats.acquireCount:操作以指定模式获取锁的次数。
    currentOp.lockStats.acquireWaitCount:操作必须等待acquirecallock获取的次数,因为锁处于冲突模式。acquireWaitCount小于或等于acquirecore。
    currentOp.lockStats.timeAcquiringMicros:操作必须等待获取锁的累积时间(以微秒为单位)。时间获取微s除以acquireWaitCount给出了特定锁定模式的平均等待时间。
    currentOp.lockStats.deadlockCount:在等待锁获取时,操作遇到死锁的次数。

    1:查看MongoDB当前正在做哪些操作?

    db.currentOp()
    等同于:
    db.$cmd.sys.inprog.findOne()

    2:查看当前有多少个连接?

    db.serverStatus().connections

    3:详解currentOp()

    gechongrepl:PRIMARY> db.currentOp()
    {
        "inprog" : [
            {
                "opid" : 6222,   #进程号
                "active" : true, #是否活动状态
                "secs_running" : 3,#操作运行了多少秒
                "microsecs_running" : NumberLong(3662328),#操作持续时间(以微秒为单位)。MongoDB通过从操作开始时减去当前时间来计算这个值。
                "op" : "getmore",#操作类型,包括(insert/query/update/remove/getmore/command)
                "ns" : "local.oplog.rs",#命名空间
                "query" : {#如果op是查询操作,这里将显示查询内容;也有说这里显示具体的操作语句的
                     
                },
                "client" : "192.168.91.132:45745",#连接的客户端信息
                "desc" : "conn5",#数据库的连接信息
                "threadId" : "0x7f1370cb4700",#线程ID
                "connectionId" : 5,#数据库的连接ID
                "waitingForLock" : false,#是否等待获取锁
                "numYields" : 0,
                "lockStats" : {
                    "timeLockedMicros" : {#持有的锁时间微秒
                        "r" : NumberLong(141),#整个MongoDB实例的全局读锁
                        "w" : NumberLong(0)#整个MongoDB实例的全局写锁
                    },
                    "timeAcquiringMicros" : {#为了获得锁,等待的微秒时间
                        "r" : NumberLong(16),#整个MongoDB实例的全局读锁
                        "w" : NumberLong(0)#整个MongoDB实例的全局写锁
                    }
                }
            }
        ]
    }
  • 相关阅读:
    基于Metaweblog API 接口一键发布到国内外主流博客平台
    uva144 Student Grants
    Uva 10452
    Uva 439 Knight Moves
    Uva 352 The Seasonal War
    switch语句
    java——基础知识
    我的lua学习2
    codeforces 431 D. Random Task 组合数学
    codeforces 285 D. Permutation Sum 状压 dfs打表
  • 原文地址:https://www.cnblogs.com/duanxz/p/4366603.html
Copyright © 2011-2022 走看看