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 ,如需转载请自行联系原作者


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
NoSQL 关系型数据库 MySQL
MongoDB 慢查询语句优化分析策略
MongoDB查询语句太慢了,开启 Profiling 功能进行分析后发现,问题其实很好解决,涨知识了
508 0
|
2月前
|
存储 NoSQL MongoDB
MongoDB 查询分析
10月更文挑战第21天
17 1
|
7月前
|
存储 监控 NoSQL
【MongoDB 专栏】MongoDB 的日志管理与分析
【5月更文挑战第11天】MongoDB日志管理与分析至关重要,包括系统日志和操作日志,用于监控、故障排查和性能优化。合理配置日志详细程度、存储位置和保留策略,使用日志分析工具提升效率,发现性能瓶颈和安全性问题。日志分析有助于优化查询、调整配置,确保数据安全,并可与其他监控系统集成。面对日志量增长的挑战,需采用新技术如分布式存储和数据压缩来保障存储和传输。随着技术发展,不断进化日志管理与分析能力,以支持MongoDB的稳定高效运行。
179 2
【MongoDB 专栏】MongoDB 的日志管理与分析
|
6月前
|
监控 NoSQL 大数据
深入解析 MongoDB Map-Reduce:强大数据聚合与分析的利器
深入解析 MongoDB Map-Reduce:强大数据聚合与分析的利器
|
6月前
|
监控 NoSQL MongoDB
深度优化:掌握 MongoDB 查询分析的关键技巧
深度优化:掌握 MongoDB 查询分析的关键技巧
|
7月前
|
存储 NoSQL 数据挖掘
MongoDB 实时分析案例
【5月更文挑战第7天】
230 0
|
7月前
|
存储 NoSQL MongoDB
【MongoDB】MongoDB 索引结构底层原理分析
【4月更文挑战第1天】【MongoDB】MongoDB 索引结构底层原理分析
|
存储 人工智能 NoSQL
多维数据实时分析,MongoDB给零售企业提供快速高效的数据洞察力
客户行为正在迅速演变,供应链正在重组,员工也正在以新的方式工作。企业需要提供更加个性化的客户体验,对市场趋势做出更快速的反应,监测和预防潜在问题。
多维数据实时分析,MongoDB给零售企业提供快速高效的数据洞察力
|
7月前
|
存储 监控 NoSQL
数据存储与分析:办公室电脑屏幕监控的MongoDB应用实例
在当今数字时代,数据的存储和分析变得愈发重要,尤其是在办公环境中,对电脑屏幕进行监控成为一种日益普遍的需求。本文将介绍如何利用MongoDB数据库实现办公室电脑屏幕监控,并通过代码实例展示其应用。
261 0
|
存储 NoSQL 安全
【MongoDB行业案例】Bosch IoT 和应用程序驱动型分析的重要性
将运营和分析工作负载整合到一处的数据平台