db.currentOp是個好東西,顧名思義,就是目前的操作。在mongodb中可以檢視目前資料庫上此刻的操作語句資訊,包括insert/query/update/remove/getmore/command等多種操作。直接執行
db.currentOp()一般傳回一個空的數組,我們可以指定一個參數true,這樣就傳回使用者connections與系統cmmand相關的操作。下面看個列子:
db.currentOp(true) 會傳回很多資訊:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<code> </code><code>{ "inprog" : </code>
<code> </code><code>[ </code>
<code> </code><code>{ </code>
<code> </code><code>"opid" : 3434473,//操作的id </code>
<code> </code><code>"active" : <boolean>,//是否處于活動狀态 </code>
<code> </code><code>"secs_running" : 0,//操作運作了多少秒 </code>
<code> </code><code>"op" : "<operation>",//具體的操作行為,包括(insert/query/update/remove/getmore/command) </code>
<code> </code><code>"ns" : "<database>.<collection>",//操作的命名空間,如:資料庫名.集合名 </code>
<code> </code><code>"query" : {//具體的操作語句 </code>
<code> </code><code>}, </code>
<code> </code><code>"client" : "<host>:<outgoing>",//連接配接的用戶端資訊 </code>
<code> </code><code>"desc" : "conn57683",//資料庫連接配接描述 </code>
<code> </code><code>"threadId" : "0x7f04a637b700",//線程id </code>
<code> </code><code>"connectionId" : 57683,//資料庫連接配接id </code>
<code> </code><code>"locks" : {//鎖的相關資訊 </code>
<code> </code><code>"^" : "w", </code>
<code> </code><code>"^local" : "W", </code>
<code> </code><code>"^<database>" : "W" </code>
<code> </code><code>"waitingForLock" : false,//是否在等待并擷取鎖, </code>
<code> </code><code>"msg": "<string>" </code>
<code> </code><code>"numYields" : 0, </code>
<code> </code><code>"progress" : { </code>
<code> </code><code>"done" : <number>, </code>
<code> </code><code>"total" : <number> </code>
<code> </code><code>} </code>
<code> </code><code>"lockStats" : { </code>
<code> </code><code>"timeLockedMicros" : {//此操作獲得以下鎖後,把持的微秒時間 </code>
<code> </code><code>"R" : NumberLong(),//整個mongodb服務執行個體的全局讀鎖 </code>
<code> </code><code>"W" : NumberLong(),//整個mongodb服務執行個體的全局寫鎖 </code>
<code> </code><code>"r" : NumberLong(),//某個資料庫執行個體的讀鎖 </code>
<code> </code><code>"w" : NumberLong() //某個資料庫執行個體的寫鎖 </code>
<code> </code><code>}, </code>
<code> </code><code>"timeAcquiringMicros" : {//此操作為了獲得以下的鎖,而耗費等待的微秒時間 </code>
<code> </code><code>"w" : NumberLong()//某個資料庫執行個體的寫鎖 </code>
<code> </code><code>} </code>
<code> </code><code>}, </code>
<code> </code><code>..... </code>
<code> </code>
<code> </code><code>] </code>
<code> </code><code>}</code>
注:
1秒=1000毫秒(ms) 1毫秒=1/1,000秒(s)
1秒=1,000,000 微秒(μs) 1微秒=1/1,000,000秒(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
}
列印用戶端資訊
<code> </code><code>db.currentOp(</code><code>true</code><code>).inprog.forEach( </code>
<code> </code><code>function</code><code>(opDoc){ </code>
<code> </code><code>if</code> <code>(opDoc.client) </code>
<code> </code><code>printjson(opDoc.client) </code>
<code> </code><code>} </code>
<code> </code><code>)</code>
還可以擷取目前操作中,已停止活動 并且操作行為為query的資訊
<code> </code><code>db.currentOp(</code><code>true</code><code>).inprog.forEach( </code>
<code> </code><code>function</code><code>(opDoc){</code><code>//opDoc其實是傳回的每個op操作對象 </code>
<code> </code><code>if</code><code>(!opDoc.active && opDoc.op==</code><code>'query'</code><code>) </code>
<code> </code><code>printjson(opDoc) </code>
<code> </code><code>} </code>
<code> </code><code>)</code>
還可以擷取目前操作中,正在進行中 并且操作行為為query的資訊
<code> </code><code>function</code><code>(opDoc){</code><code>//opDoc其實是傳回的每個op操作對象 </code>
<code> </code><code>if</code><code>(opDoc.active && opDoc.op==</code><code>'query'</code><code>) </code>
<code> </code><code>printjson(opDoc) </code>
<code> </code><code>} </code>
通過以上監控如果發現某個操作比較慢,還可以對其進行kill:
db.killOp(opid) //kill目前的操作 opid為具體的操作id号,當然了,隻能kill正在進行中的。
本文轉自UltraSQL51CTO部落格,原文連結:http://blog.51cto.com/ultrasql/1706481 ,如需轉載請自行聯系原作者