如果發出了一個執行耗時很長的任務給MongoDB服務器,客戶端強制終止會導致任務依然在服務器端執行。
這時MongoDB提供了查詢和管理正在執行任務的方式。
// db.currentOp() 獲得當前的所有`in progressing`的操作,包括insert/query/update/remove/getmore/command等 > db.currentOp(true)
返回的數據結構如下:
{ "inprog" :
[
{
"opid" : 3434473,//操作的id
"active" : <boolean>,//是否處於活動狀態
"secs_running" : 0,//操作運行了多少秒
"op" : "<operation>",//具體的操作行為,包括(insert/query/update/remove/getmore/command)
"ns" : "<database>.<collection>",//操作的命名空間,如:數據庫名.集合名
"query" : {//具體的操作語句
},
"client" : "<host>:<outgoing>",//連接的客戶端信息
"desc" : "conn57683",//數據庫連接描述
"threadId" : "0x7f04a637b700",//線程id
"connectionId" : 57683,//數據庫連接id
"locks" : {//鎖的相關信息
"^" : "w",
"^local" : "W",
"^<database>" : "W"
},
"waitingForLock" : false,//是否在等待並獲取鎖,
"msg": "<string>"
"numYields" : 0,
"progress" : {
"done" : <number>,
"total" : <number>
}
"lockStats" : {
"timeLockedMicros" : {//此操作獲得以下鎖后,把持的微秒時間
"R" : NumberLong(),//整個mongodb服務實例的全局讀鎖
"W" : NumberLong(),//整個mongodb服務實例的全局寫鎖
"r" : NumberLong(),//某個數據庫實例的讀鎖
"w" : NumberLong() //某個數據庫實例的寫鎖
},
"timeAcquiringMicros" : {//此操作為了獲得以下的鎖,而耗費等待的微秒時間
"R" : NumberLong(),//整個mongodb服務實例的全局讀鎖
"W" : NumberLong(),//整個mongodb服務實例的全局寫鎖
"r" : NumberLong(),//某個數據庫實例的讀鎖
"w" : NumberLong()//某個數據庫實例的寫鎖
}
}
},
.....
]
}
找到其中耗時secs_running很長的操作,有可能是異常操作,確認后可
> db.killOp(opid)
