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实例的全局写锁
}
}
}
]
}
MongoDB分析工具之三:db.currentOp()的更多相关文章
- MongoDB分析工具之一:explain()语句分析工具
explain(),语句分析工具 MongoDB 3.0之后,explain的返回与使用方法与之前版本有了很大的变化,介于3.0之后的优秀特色和我们目前所使用给的是3.0.7版本,本文仅针对Mongo ...
- MongoDB分析工具之二:MongoDB分析器Profile
MongoDB优化器profile 在MySQL 中,慢查询日志是经常作为我们优化数据库的依据,那在MongoDB 中是否有类似的功能呢?答案是肯定的,那就是MongoDB Database Prof ...
- MongoDB.WebIDE:升级版的Mongodb管理工具
很早以前收藏了一片文章:<强大的MongoDB数据库管理工具>.最近刚好要做一些MongoDB方面的工作,于是翻出来温习了一下,用起来也确实挺方便.不过在使用过程中出现了一些个问题,加上更 ...
- 有用的 Mongo命令行 db.currentOp() db.collection.find().explain() - 摘自网络
在Heyzap 和 Bugsnag 我已经使用MongoDB超过一年了,我发现它是一个非常强大的数据库.和其他的数据库一样,它有一些缺陷,但是这里有一些东西我希望有人可以早一点告诉我的. 即使建立索引 ...
- mongodb系列之-治理mongodb->db.currentOp()
mongodb系列之-管理mongodb->db.currentOp() 管理mongodb->db.currentOp(), 绝对是原创... 今天公司的dba在内部分享了针对mysql ...
- 日志分析工具ELK配置详解
日志分析工具ELK配置详解 一.ELK介绍 1.1 elasticsearch 1.1.1 elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分 ...
- mysqlsla慢查询分析工具教程
mysqlsla是一款帮助语句分析.过滤.和排序的功能,能够处理MySQL慢查询日志.二进制日志等.整体来说, 功能非常强大. 能制作SQL查询数据报表,分析包括执行频率, 数据量, 查询消耗等. 且 ...
- Red Gate系列之七 SQL Search 1.1.6.1 Edition SQL查询分析工具使用教程
原文:Red Gate系列之七 SQL Search 1.1.6.1 Edition SQL查询分析工具使用教程 Red Gate系列之七 SQL Search 1.1.6.1 Edition SQL ...
- PHP 性能追踪及分析工具(XHPROF)
原文:https://gold.xitu.io/post/5860d23f128fe10069e1cfbf XHPROF:Facebook 开源的轻量级PHP性能分析工具. 它报告函数级别的请求次数和 ...
随机推荐
- Item 51:写new和delete时请遵循惯例
Item 51: Adhere to convention when writing new and delete. Item 50介绍了怎样自己定义new和delete但没有解释你必须遵循的惯例. ...
- 无向图的点双连通分量(tarjan模板)
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #i ...
- Oracle Apex 有用笔记系列 6 - 可编辑交互报告 Editable Interactive Report
据笔者所知.Apex 4.x 是没有提供可编辑交互报告组件的.这就须要我们手动实现. 事实上这也并非非常复杂,仅仅须要简单几步. 1. 依据向导建立一个interactive report.查询语句能 ...
- visual c++ 2013进行MySQL编程(ODBC) -- (一) 套装安装
最近写了有些技术类文章了,只因为最近研究多了些东西,有一些项目用到了,所以自己记录一下,怕自己忘记,如果有哪位同学有自己的见解,可以邮件或者回复,技术类的探讨,不管对否,都是欢迎的. 操作之前,必须安 ...
- 设计模式之中介者模式(Mediator)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程.它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- C#自定义类型数组排序
在数组或者集合中对自定义类型进行排序分为两种方法. 1.如果这个自定义类型是自己定义编写的,那么我可以使它继承ICompareable<T>接口,实现其中的CompareTo(Object ...
- http协议的Last-Modified
$modified_time = $_SERVER['HTTP_IF_MODIFIED_SINCE']; if (strtotime($modified_time) + 3600 > time( ...
- PCB常用单位转换 mil 英尺
PCB常用单位转换 mil 英尺 相关常用单位 1mil = 0.0254mm 100mil = 2.54mm 1英寸 = 1000mil = 2.54cm 1英尺 = 12英寸 ...
- Python生成器定义
通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素 ...
- Linux学习笔记——例说makefile 综合案例
0.前言 从学习C语言開始就慢慢開始接触makefile,查阅了非常多的makefile的资料但总感觉没有真正掌握makefile,假设自己动手写一个makefile总认为非常吃力.所以特意借 ...