mongodb-查看當前數據庫動態

一、查看當前的操作

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     此服務器打開的連接數,包括輸入和輸出的連接。







發佈了54 篇原創文章 · 獲贊 8 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章