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实例的全局写锁}}}]
}

 

转载于:https://www.cnblogs.com/duanxz/p/4366603.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 添加样式,添加样式到php html电子邮件

我仔细查看了这个问题,我在此发现的是添加以下内容&#xff1a;$headers MIME-Version: 1.0 . "\r\n";$headers . Content-type: text/html; charsetiso-8859-1 . "\r\n";和我想发送一个时事通讯类型的电子邮件,所以造型真的很重要.我观看的所有视频都只是…

前端学习(1411):多人管理31数据分页2

{{extend ./common/layout.art}}{{block main}}<!-- 子模板的相对路径相对的就是当前文件 因为它是由模板引擎解析的 而不是浏览器 -->{{include ./common/header.art}}<!-- 主体内容 --><div class"content">{{include ./common/aside.art}}<d…

软件推广

新闻是按照日历来做主导的&#xff0c;如果做的东西也和最近发生的事情有关的话&#xff0c;契合节假日&#xff08;突然想到春运&#xff09;&#xff0c;曝光率会增加在制作软件的同时就要考虑到如何推广。国内的视频公司在视频前的广告和适合做软件推广。新电影上映&#xf…

php按城市显示搜索结果,搜索结果页(通过数据库搜索)

_z2yJxW">本文档讲的是如何通过直接通过数据库搜索接口模板显示搜索结果页。接口&#xff1a;akcms_page.php一 首先在网站根目录创建一个php文件&#xff0c;文件名随便起比如&#xff1a;db_search.php&#xff0c;内容是&#xff1a;$template search.htm;include …

前端学习(1412):多人管理32修改

const { User } require(../../model/user);module.exports async (req, res) > {// 获取到地址栏中的id参数const { message, id } req.query;// 如果当前传递了id参数if (id) {// 修改操作let user await User.findOne({_id: id});// 渲染用户编辑页面(修改)res.rende…

真正能成功的人,不见得是最聪明的,也小见得是学历最高的,而是最能面对问题、锲而不舍的人。...

要知道&#xff0c;这世界上真正能成功的人&#xff0c;不见得是最聪明的&#xff0c;也小见得是学历最高的&#xff0c;而是最能面对问题、锲而不舍的人。 爸爸以前有个同学&#xff0c;追班上一个女生。这男生很不会说话&#xff0c;他开门见山就对女生讲“我爱你”。 那女生…

前端学习(1413):多人管理33修改2(未能完结)

// 引用expess框架 const express require(express); // 创建博客展示页面路由 const admin express.Router();// 渲染登录页面 admin.get(/login, require(./admin/loginPage));// 实现登录功能 admin.post(/login, require(./admin/login));// 创建用户列表路由 admin.get(…

redis php 性能测试工具,redis性能测试与客户端连接详解

Redis 性能测试(推荐&#xff1a;redis入门教程)语法redis-benchmark [option] [option value]实例实例一以下实例同时执行 1000 个请求来检测性能&#xff1a;$ redis-benchmark -n 1000 -qps: 本地 docker 暂时不支持命令。结果跳过&#xff0c;请自行测试。redis:6379> b…

前端学习(1415):ajax的运行环境

// 引用expess框架 const express require(express); // 处理路径 const path require(path);// 创建网站服务器 const app express();app.use(express.static(path.join(__dirname))); // 监听端口 app.listen(3000); console.log(网站服务器启动成功, 请访问localhost)

Selenium Webdriver ie 浏览器

webDriver 在测试ie 的时候会遇到很多的问题&#xff0c;记录下&#xff1a; 1.需要ie的driver驱动 需要下载 IEDriverServer.exe 并把这个驱动放在系统ie 的文件夹下 C:\Program Files\Internet Explorer 2.启动selenium 的时候需要将浏览器安全设置给取消掉 3.启动的时候还…

SharePoint 跨域还原网站一则

博客地址&#xff1a;http://blog.csdn.net/foxdave源端&#xff1a;执行PowerShell命令备份网站集Backup-SPSite http://server_name/sites/site_name -Path C:\Backup\site_name.bak目的端&#xff1a;执行PowerShell命令还原网站集Restore-SPSite http://server_name/sites/…

前端学习(1417):ajax实现步骤

ajax.js // 引用expess框架 const express require(express); // 处理路径 const path require(path);// 创建网站服务器 const app express(); app.get(/first, (req, res) > {res.send(hello geyao) }) app.use(express.static(path.join(__dirname))); // 监听端口 a…

Java代码块回调,QueueEvent - 队列化执行线程和代码块

QueueEvent队列化执行线程和代码块函数说明1.主要有两个子类&#xff0c;QueueEventThread用来顺序执行线程&#xff0c;QueueEventCode用来顺序执行代码2.可以使用setSpeed()设置执行速率3.enqueue()加入队列4.next()执行队列中的下一个事件5.setSnyc()是否同步执行6.finish()…

数组结对

1.设计思想&#xff1a;测试数组长度的最大范围&#xff0c;测试每个元素是int32 类型的&#xff0c;将数组的长度设为2&#xff0c;第一个数字输入最大位数的数字&#xff0c;查看结果。 2.出现的问题&#xff1a; 测试1000个元素&#xff0c; 测试1000个元素程序没有问题&…

前端学习(1418):服务器响应的数据格式

ajax.js // 引用expess框架 const express require(express); // 处理路径 const path require(path);// 创建网站服务器 const app express(); app.get(/first, (req, res) > {res.send(hello geyao) }) app.get(/responsdate, (req, res) > {res.send({ "name…

IT基础架构规划方案二(计算机系统与机房规划规划)

计算机系统规划 服务器硬件选型规划方案 根据对某集团的实际调研&#xff0c;获取了企业业务应用系统的建设情况&#xff0c;随着企业信息化建设的推进&#xff0c;需要对各种信息化管理系统和应用系统的服务器选型进行选型规划&#xff0c;根据不同的系统对服务器硬件的…

java推送数据给安卓,java – 如何从Firebase推送通知中获取数据并将其显示在Android Activity中?...

对不起这个noob问题,我是android开发的新手.我目前正在开发一个项目,需要向安装了我的应用程序的Android设备发送推送通知.我已经按照firebase的快速入门教程完成了这项工作,并在我的设备上成功收到了通知.问题&#xff1a;如何检索服务器发送的消息并将该消息显示给我的Androi…

前端学习(1419):ajax请求参数传递

ajax.js // 引用expess框架 const express require(express); // 处理路径 const path require(path);// 创建网站服务器 const app express(); app.get(/first, (req, res) > {res.send(hello geyao) }) app.get(/responsdate, (req, res) > {res.send({ "name…

bzoj 3595

Splay 每个节点维护一个区间。 1 /**************************************************************2 Problem: 35953 User: idy0024 Language: C5 Result: Accepted6 Time:5428 ms7 Memory:56020 kb8 *********************************************…