標籤: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()