一、查看當前的操作
1、db.currentOp()
currentOp會將後端Mongod上正在執行的請求都列出來,也可根據查詢條件(如請求類型,請求是否正在等待鎖,請求操作的DB或collection)來進行過濾。
example:
查詢連接到db1上的操作時間大於3s的操作:
db.currentOp(
{
"active" : true,
"secs_running" : { "$gt" : 3 },
"ns" : /^db1\./
}
)
output example:
{
"inprog": [
{
"desc" : <string>,
"threadId" : <string>,
"connectionId" : <number>,
"opid" : <number>,
"active" : <boolean>,
"secs_running" : <NumberLong()>,
"microsecs_running" : <number>,
"op" : <string>,
"ns" : <string>,
"query" : <document>,
"insert" : <document>,
"planSummary": <string>,
"client" : <string>,
"msg": <string>,
"progress" : {
"done" : <number>,
"total" : <number>
},
"killPending" : <boolean>,
"numYields" : <number>,
"locks" : {
"Global" : <string>,
"MMAPV1Journal" : <string>,
"Database" : <string>,
"Collection" : <string>,
"Metadata" : <string>,
"oplog" : <string>
},
"waitingForLock" : <boolean>,
"lockStats" : {
"Global": {
"acquireCount": {
"r": <NumberLong>,
"w": <NumberLong>,
"R": <NumberLong>,
"W": <NumberLong>
},
"acquireWaitCount": {
"r": <NumberLong>,
"w": <NumberLong>,
"R": <NumberLong>,
"W": <NumberLong>
},
"timeAcquiringMicros" : {
"r" : NumberLong(0),
"w" : NumberLong(0),
"R" : NumberLong(0),
"W" : NumberLong(0)
},
"deadlockCount" : {
"r" : NumberLong(0),
"w" : NumberLong(0),
"R" : NumberLong(0),
"W" : NumberLong(0)
}
},
"MMAPV1Journal": {
...
},
"Database" : {
...
},
...
}
},
...
],
"fsyncLock": <boolean>,
"info": <string>
}
輸出中的重要字段:
opid:
操作的唯一標識,可以在mongo shell中通過db.killOp(opid)終止一個操作。
active:
表示操作是否正在運行。如果該字段值爲false,表示該操作已經交出或者整在等待其他操作交出鎖。
secs_running:
表示該操作已經運行的時長,可通過該字段判斷慢查詢。
op:
表示操作的類型,通常是查詢、插入、更新、刪除的一種。注意數據庫命令也被當做查詢操作來處理。
WaitingForLock:
表示該操作是否因正在等待其他操作交出鎖而處於等待狀態。
numYields:
表示操作交出鎖而使其他操作得以運行的次數。通常進行文檔搜索的操作(查詢、更新和刪除)可以交出鎖。
2、db.killOp()
可以db.killOp(opid)終止操作。
並非所有的操作都可以被終止,只有交出了鎖的進程的才能被終止,正在佔用鎖,或者正在等待其他操作交出鎖的操作通常無法被終止。
二、計算空間消耗
1、查看文檔大小
Object.bsonsize({_id:ObjectId()})
2、查看數據庫信息
db.stats()
MongoDB Enterprise > db.stats()
{
"db" : "test",
"collections" : 1,
"objects" : 2000,
"avgObjSize" : 33,
"dataSize" : 66000,
"storageSize" : 73728,
"numExtents" : 0,
"indexes" : 1,
"indexSize" : 49152,
"ok" : 1
}
MongoDB Enterprise >
可以在stats中傳入比例因子:KB的值爲1024,MB爲1024*1024,以此類推
MongoDB Enterprise > db.stats(1024)
{
"db" : "test",
"collections" : 1,
"objects" : 2000,
"avgObjSize" : 33,
"dataSize" : 64.453125,
"storageSize" : 72,
"numExtents" : 0,
"indexes" : 1,
"indexSize" : 48,
"ok" : 1
}
MongoDB Enterprise >
3、查看集合信息
db.collection.stats()
4、mongotop 和 mongostat
mongodb自帶幾個命令行工具,可以每個幾秒輸出當前的狀態。
yangweideMacBook-Pro:~ yangwei$ mongostat
insert query update delete getmore command % dirty % used flushes vsize res qr|qw ar|aw netIn netOut conn time
*0 *0 *0 *0 0 1|0 0.0 0.0 0 2.46G 30.0M 0|0 0|0 79b 18.5k 2 2016-10-14T11:19:53+08:00
*0 *0 *0 *0 0 1|0 0.0 0.0 1 2.46G 30.0M 0|0 0|0 79b 18.5k 2 2016-10-14T11:19:54+08:00
*0 *0 *0 *0 0 1|0 0.0 0.0 0 2.46G 30.0M 0|0 0|0 79b 18.5k 2 2016-10-14T11:19:55+08:00
*0 *0 *0 *0 0 1|0 0.0 0.0 0 2.46G 30.0M 0|0 0|0 79b 18.5k 2 2016-10-14T11:19:56+08:00
*0 *0 *0 *0 0 1|0 0.0 0.0 0 2.46G 30.0M 0|0 0|0 79b 18.5k 2 2016-10-14T11:19:57+08:00
*0 *0 *0 *0 0 1|0 0.0 0.0 0 2.46G 30.0M 0|0 0|0 79b 18.5k 2 2016-10-14T11:19:58+08:00
*0 *0 *0 *0 0 1|0 0.0 0.0 0 2.46G 30.0M 0|0 0|0 79b 18.5k 2 2016-10-14T11:19:59+08:00
*0 *0 *0 *0 0 1|0 0.0 0.0 0 2.46G 30.0M 0|0 0|0 79b 18.5k 2 2016-10-14T11:20:00+08:00
*0 *0 *0 *0 0 1|0 0.0 0.0 0 2.46G 30.0M 0|0 0|0 79b 18.5k 2 2016-10-14T11:20:01+08:00
*0 *0 *0 *0 0 1|0 0.0 0.0 0 2.46G 30.0M 0|0 0|0 79b 18.5k 2 2016-10-14T11:20:02+08:00
mongostat默認每秒輸出一次,可傳入參數更改時間間隔
yangweideMacBook-Pro:~ yangwei$ mongostat 2 # 每隔2s輸出一次
輸出說明:
insert query update delete getmore command 每種操作發生的次數
flushes mongod將數據刷新到磁盤的次數
vsize mongod正在使用的虛擬內存的大小,通常爲數據目錄的2倍大小(一次用於映射文件,一次用於日記系統)
res mongod正在使用的內存的大小,通常該值應該儘量接近機器所有內存的大小。
qr | qw 讀寫操作隊列大小,即有多少讀寫操作被阻塞,等待進行處理。
ar | aw 活動客戶端的數量,即正在進行讀寫操作的客戶端。
netIn 通過網絡傳輸進來的字節數。
netOut 通過網絡傳輸出去的字節數。
conn 此服務器打開的連接數,包括輸入和輸出的連接。