zoukankan      html  css  js  c++  java
  • mongodb系列之-治理mongodb->db.currentOp()

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

    管理mongodb->db.currentOp(), 绝对是原创...

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

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

     

          执行命令会返回一个inprog数组,数组中每个元素都是一个nested document,以其中一个为例,解释下具体意思:

    {

             "opid" : 37432,//此操作的id

             "active" : false,//此操作是否处于活动状态

             "secs_running" : 0,//此操作运行了多少秒

             "op" : "query",//具体的操作行为,包括(insert/query/update/remove/getmore/command)

             "ns" : "category.categoryDocs",//此操作的命名空间,数据库名.集合名

            //具体的操作语句

             "query" : {

                     "cname" : "孢子植物",

                     "sort" : 2

             },

             "client" : "*.*.*.*:21758",//连接的客户端信息

             "desc" : "conn724",//数据库连接描述

             "threadId" : "0x78156940",//线程id

             "connectionId" : 724,//数据库连接id

             "waitingForLock" : false,//是否在等待获取锁,

             "numYields" : 0,

             "lockStats" : {

                     "timeLockedMicros" : {//此操作获得以下锁后,把持的微秒时间

                                "R" : NumberLong(0),//整个mongodb服务实例的全局读锁

                                "W" : NumberLong(0),//整个mongodb服务实例的全局写锁

                                 "r" : NumberLong(170),//整个数据库实例的读锁

                                "w" : NumberLong(0)//整个数据库实例的写锁

                     },

                     "timeAcquiringMicros" : {//此操作为了获得以下的锁,而耗费等待的微秒时间

                                "R" : NumberLong(),//整个mongodb服务实例的全局读锁

                                "W" : NumberLong(),//整个mongodb服务实例的全局写锁

                                 "r" : NumberLong(5),//整个数据库实例的读锁

                                "w" : NumberLong(0),//整个数据库实例的写锁

                     }

             }

     }

     

        时间单位换算:

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

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

     

     

     

       其实,我们可以写脚本对inprog数组进行筛选来得到自己想要的数据,比如:

     

    1:--获取已停止活动+操作为查询的数据

    db.currentOp(true).inprog.forEach(

       function(opDoc){//opDoc其实是返回的每个op操作对象

         if(!opDoc.active && opDoc.op=='query')

            printjson(d)//打印信息

         }

     )

     

     2:--正在进行中+操作为查询的数据

     db.currentOp(true).inprog.forEach(

       function(opDoc){//opDoc其实是返回的每个op操作对象

         if(opDoc.active && opDoc.op=='query')

            printjson(d)//打印信息

         }

     )

     

           通过以上监控如果发现某个操作比较慢,还可以对其进行kill,很简单,知道了具体的opid后,一句命令就可以搞定,so easy:

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

     

          好了,先写这么多,有时间了继续写自己在mongodb方面的心得,记下来不为别的,只为刚入门的兄弟少走弯路....

    http://www.myexception.cn/database/1260955.html

  • 相关阅读:
    20145331 《信息安全系统设计基础》第11周学习总结
    20145331魏澍琛《信息安全系统设计基础》第10周学习总结
    20145331 《信息安全系统设计基础》实验四 外设驱动设计
    20145331 《信息安全系统设计基础》实验二 固件设计
    20145330 《网络对抗》逆向及BOF基础实践
    20145330 《信息安全系统设计基础》课程总结
    20145330 《信息安全系统设计基础》第14周学习总结
    20145330 《信息安全系统设计基础》第13周学习总结
    20145330 《信息安全系统设计基础》第12周学习总结
    20145216 20145330 《信息安全系统设计基础》 实验五 简单嵌入式WEB 服务器实验
  • 原文地址:https://www.cnblogs.com/seasonzone/p/4118241.html
Copyright © 2011-2022 走看看