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

來源:互聯網
上載者:User

標籤:des   style   blog   http   io   ar   os   sp   for   

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

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.