MongoDB的db.currentOp()输出结果分析

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:

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

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

 

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
     { "inprog" :   
         [   
             {  
                         "opid" : 3434473,//操作的id  
                         "active" : <boolean>,//是否处于活动状态  
                         "secs_running" : 0,//操作运行了多少秒  
                         "op" : "<operation>",//具体的操作行为,包括(insert/query/update/remove/getmore/command)  
                         "ns" : "<database>.<collection>",//操作的命名空间,如:数据库名.集合名  
                         "query" : {//具体的操作语句  
                         },  
                         "client" : "<host>:<outgoing>",//连接的客户端信息  
                         "desc" : "conn57683",//数据库连接描述  
                         "threadId" : "0x7f04a637b700",//线程id  
                         "connectionId" : 57683,//数据库连接id  
                         "locks" : {//锁的相关信息  
                                 "^" : "w",  
                                 "^local" : "W",  
                                 "^<database>" : "W"  
                         },  
                         "waitingForLock" : false,//是否在等待并获取锁,  
                         "msg": "<string>"  
                         "numYields" : 0,  
                         "progress" : {  
                                 "done" : <number>,  
                                 "total" : <number>  
                         }  
                         "lockStats" : {  
                                 "timeLockedMicros" : {//此操作获得以下锁后,把持的微秒时间  
                                         "R" : NumberLong(),//整个mongodb服务实例的全局读锁  
                                         "W" : NumberLong(),//整个mongodb服务实例的全局写锁  
                                         "r" : NumberLong(),//某个数据库实例的读锁  
                                         "w" : NumberLong() //某个数据库实例的写锁  
                                 },  
                                 "timeAcquiringMicros" : {//此操作为了获得以下的锁,而耗费等待的微秒时间  
                                         "R" : NumberLong(),//整个mongodb服务实例的全局读锁  
                                         "W" : NumberLong(),//整个mongodb服务实例的全局写锁  
                                         "r" : NumberLong(),//某个数据库实例的读锁  
                                         "w" : NumberLong()//某个数据库实例的写锁  
                                 }  
                         }  
                 },  
                 .....  
               
         ]   
     }

 

注:

1秒=1000毫秒(ms) 1毫秒=1/1,000秒(s)

1秒=1,000,000 微秒(μs) 1微秒=1/1,000,000秒(s)


查看db.currentOp函数定义

rs_test:SECONDARY> db.currentOp   
function ( arg ){    
    var q = {}    
    if ( arg ) {    
        if ( typeof( arg ) == "object" )    
            Object.extend( q , arg );    
        else if ( arg )    
            q["$all"] = true;    
    }

    // don't send any read preference with psudo commands   
    var _readPref = this.getMongo().getReadPrefMode();    
    try {    
        this.getMongo().setReadPref(null);    
        var results = this.$cmd.sys.inprog.findOne( q );    
    } finally {    
        this.getMongo().setReadPref(_readPref);    
    }

    return results   
}


打印客户端信息   

1
2
3
4
5
6
     db.currentOp( true ).inprog.forEach(    
         function (opDoc){    
             if  (opDoc.client)    
         printjson(opDoc.client)    
         }    
     )


还可以获取当前操作中,已停止活动 并且操作行为为query的信息   

1
2
3
4
5
6
     db.currentOp( true ).inprog.forEach(  
        function (opDoc){ //opDoc其实是返回的每个op操作对象  
          if (!opDoc.active && opDoc.op== 'query' )  
             printjson(opDoc)  
          }  
      )


还可以获取当前操作中,正在进行中 并且操作行为为query的信息   

1
2
3
4
5
6
     db.currentOp( true ).inprog.forEach(  
       function (opDoc){ //opDoc其实是返回的每个op操作对象  
         if (opDoc.active && opDoc.op== 'query' )  
            printjson(opDoc)  
         }  
     )


通过以上监控如果发现某个操作比较慢,还可以对其进行kill:

   db.killOp(opid) //kill当前的操作 opid为具体的操作id号,当然了,只能kill正在进行中的。














本文转自UltraSQL51CTO博客,原文链接:http://blog.51cto.com/ultrasql/1706481 ,如需转载请自行联系原作者


相关文章
|
NoSQL 关系型数据库 MySQL
MongoDB 慢查询语句优化分析策略
MongoDB查询语句太慢了,开启 Profiling 功能进行分析后发现,问题其实很好解决,涨知识了
642 0
|
8月前
|
NoSQL MongoDB 数据库
微服务——MongoDB实战演练——表结构分析
本文档来源于数据库articledb,展示了一张图片资源。图片宽度为1207像素,高度607像素,采用内联显示方式。内容涉及图像处理与样式设定,适用于文档或网页设计中多媒体元素的布局参考。图片来源为cdn.nlark.com,支持webp格式并附带水印处理。
122 1
微服务——MongoDB实战演练——表结构分析
|
存储 NoSQL MongoDB
MongoDB 查询分析
10月更文挑战第21天
114 1
|
存储 监控 NoSQL
【MongoDB 专栏】MongoDB 的日志管理与分析
【5月更文挑战第11天】MongoDB日志管理与分析至关重要,包括系统日志和操作日志,用于监控、故障排查和性能优化。合理配置日志详细程度、存储位置和保留策略,使用日志分析工具提升效率,发现性能瓶颈和安全性问题。日志分析有助于优化查询、调整配置,确保数据安全,并可与其他监控系统集成。面对日志量增长的挑战,需采用新技术如分布式存储和数据压缩来保障存储和传输。随着技术发展,不断进化日志管理与分析能力,以支持MongoDB的稳定高效运行。
432 2
【MongoDB 专栏】MongoDB 的日志管理与分析
|
存储 NoSQL MongoDB
【MongoDB】MongoDB 索引结构底层原理分析
【4月更文挑战第1天】【MongoDB】MongoDB 索引结构底层原理分析
|
监控 NoSQL 大数据
深入解析 MongoDB Map-Reduce:强大数据聚合与分析的利器
深入解析 MongoDB Map-Reduce:强大数据聚合与分析的利器
253 0
|
监控 NoSQL MongoDB
深度优化:掌握 MongoDB 查询分析的关键技巧
深度优化:掌握 MongoDB 查询分析的关键技巧
259 0
|
存储 NoSQL 数据挖掘
MongoDB 实时分析案例
【5月更文挑战第7天】
467 0
|
存储 人工智能 NoSQL
多维数据实时分析,MongoDB给零售企业提供快速高效的数据洞察力
客户行为正在迅速演变,供应链正在重组,员工也正在以新的方式工作。企业需要提供更加个性化的客户体验,对市场趋势做出更快速的反应,监测和预防潜在问题。
多维数据实时分析,MongoDB给零售企业提供快速高效的数据洞察力
|
存储 监控 NoSQL
数据存储与分析:办公室电脑屏幕监控的MongoDB应用实例
在当今数字时代,数据的存储和分析变得愈发重要,尤其是在办公环境中,对电脑屏幕进行监控成为一种日益普遍的需求。本文将介绍如何利用MongoDB数据库实现办公室电脑屏幕监控,并通过代码实例展示其应用。
355 0

推荐镜像

更多