MongoDBのdb.CurrentOp()出力結果解析


MongoDBのdb.CurrentOp()出力結果解析
 
db.currentOpは良いもので、その名の通り、現在の操作です.mongodbでは、insert/query/update/remove/getmore/commandなど、現在のデータベース上の現在の操作文情報を表示できます.直接実行
db.CurrentOp()は一般的に空の配列を返し、パラメータtrueを指定することで、ユーザーconnectionsがシステムcmmandに関連する操作を返すことができます.列を見てみましょう.
 
db.CurrentOp(true)は多くの情報を返します.
    { "inprog" :   
        [   
            {  
                        "opid" : 3434473,//   id  
                        "active" : ,//          
                        "secs_running" : 0,//          
                        "op" : "",//       ,  (insert/query/update/remove/getmore/command)  
                        "ns" : ".",//       , :    .     
                        "query" : {//         
                        },  
                        "client" : ":",//          
                        "desc" : "conn57683",//         
                        "threadId" : "0x7f04a637b700",//  id  
                        "connectionId" : 57683,//     id  
                        "locks" : {//        
                                "^" : "w",  
                                "^local" : "W",  
                                "^" : "W"  
                        },  
                        "waitingForLock" : false,//         ,  
                        "msg": ""  
                        "numYields" : 0,  
                        "progress" : {  
                                "done" : ,  
                                "total" :   
                        }  
                        "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/1000秒(s)
1秒=100000マイクロ秒(μs)1マイクロ秒=1/1000000秒(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   }
クライアント情報の印刷
    db.currentOp(true).inprog.forEach(    
        function(opDoc){    
            if (opDoc.client)    
        printjson(opDoc.client)    
        }    
    )

現在の操作でアクティビティが停止し、動作がqueryであるという情報も取得できます.
    db.currentOp(true).inprog.forEach(  
       function(opDoc){//opDoc        op      
         if(!opDoc.active && opDoc.op=='query')  
            printjson(opDoc)  
         }  
     )

現在の操作で進行中であり、操作動作がqueryである情報も取得できます.
    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が進行中のものしかありません.