mongodb系列之-管理mongodb->db.currentOp()

今天公司的dba在内部分享了针对MySQL上具体的每个crud语句操作如何进行控制管理(利用的inntop工具),挺好的。这里,我也献丑下,在mongodb中如何管理具体的每个crud操作(比如某个查询语句慢,太占资源,直接可以将其kill掉,这貌似很暴力哈,不过没关系,有时候不得已而为之...不过mongodb中可不是用第三方的工具哦,而是自家实现的功能)

 

 currentOp是个好东西,顾名思义,就是当前的操作。在mongodb中可以查看当前数据库上此刻的操作语句信息,包括insert/query/update/remove/getmore/command等多种操作。直接执行db.currentOp()一般返回一个空的数组,我们可以指定一个参数true,这样就返回用户connections与系统cmmand相关的操作。下面看个列子:

 

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

[java] view plain copy

 

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

 

 

注:

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

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

 

 

 

比如可以获取当前操作中,

--已停止活动 并且操作行为为query的信息

[java] view plain copy

 

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

 

 

 --正在进行中 并且操作行为为query的信息

[java] view plain copy

 

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

 

 

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

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

转载于:https://my.oschina.net/yagami1983/blog/811143

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值