mongodb經常使用命令

http://my.oschina.net/costaxu/blog/189406java

mongodb新手, 請指正。web

0 查看mongodb 版本

db.serverStatus()["version"]mongodb

1 查看鎖

db.serverStatus()["globalLock"]數據庫

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
     "totalTime" : NumberLong( "59472944000" ),
     "lockTime" : NumberLong(296702397),
     "currentQueue" : {
         "total" : 9,
         "readers" : 9,
         "writers" : 0
     },
     "activeClients" : {
         "total" : 1,
         "readers" : 0,
         "writers" : 1
     }
}

totalTime是數據庫啓動以後的總時間, 單位是micro second服務器

 

lockTime爲處於鎖定狀態的時間。 若是鎖定狀態的時間佔總時間較大的比例的話,說明不少請求其實是在等待鎖的釋放。網絡

current queue表示等待鎖的請求數量。 reader表示在等待讀鎖的請求數量。 writers表示等待寫鎖的請求數量。app

active clients表示處於鏈接狀態的client的數量。ui

db.serverStatus()["locks"] 這個命令能夠從一個更細的粒度查看鎖的狀況。this

 

?
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
{
     "." : {
         "timeLockedMicros" : {
             "R" : NumberLong(27575643),
             "W" : NumberLong(300769879)
         },
         "timeAcquiringMicros" : {
             "R" : NumberLong( "7300086599" ),
             "W" : NumberLong(921784415)
         }
     },
     "admin" : {
         "timeLockedMicros" : {
             "r" : NumberLong(4879),
             "w" : NumberLong(0)
         },
         "timeAcquiringMicros" : {
             "r" : NumberLong(123),
             "w" : NumberLong(0)
         }
     },
     "local" : {
         "timeLockedMicros" : {
             "r" : NumberLong(104231010),
             "w" : NumberLong(171946358)
         },
         "timeAcquiringMicros" : {
             "r" : NumberLong(740624790),
             "w" : NumberLong(292131659)
         }
     },
     "user" : {
         "timeLockedMicros" : {
             "r" : NumberLong( "34795096720" ),
             "w" : NumberLong( "12286042695" )
         },
         "timeAcquiringMicros" : {
             "r" : NumberLong( "67754724106" ),
             "w" : NumberLong( "10418999128" )
         }
     }
}

"."這一節表明全局鎖的鎖定時間和等待時間。其餘的是各個db的鎖定時間。鎖定時間長,表明長時間查詢過多。spa

 

2 查看collection的狀態

命令: db.collection.stats()

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
db.channels.stats()
{
     "ns" : "user.channels" ,
     "count" : 53409370,
     "size" : 14972217152,
     "avgObjSize" : 280.3294094650433,
     "storageSize" : 20933169056,
     "numExtents" : 30,
     "nindexes" : 3,
     "lastExtentSize" : 2146426864,
     "paddingFactor" : 1.0060000002673208,
     "systemFlags" : 1,
     "userFlags" : 0,
     "totalIndexSize" : 6916577136,
     "indexSizes" : {
         "_id_" : 2258914336,
         "usrID_1" : 2033027808,
         "num_1" : 2624634992
     },
     "ok" : 1
}

 count是記錄數量, size是總共的字節數。 avgObjSize是平均的 字節數。

 

3 mongostat命令

mongostat

 

?
1
2
3
4
5
6
7
8
insert  query update delete getmore command flushes mapped  vsize    res faults  locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn repl       time
      2    108      4     * 0       8     5 | 0       0    42g  84 .4g  1 .82g     61  user: 0.4 %          0       0 | 0     0 | 0    14k    58m    14  PRI   16 : 31 : 28
     56     74      5      1      25     7 | 0       0    42g  84 .4g  1 .82g     29 user: 15.2 %          0       0 | 0     0 | 0    25k    34m    14  PRI   16 : 31 : 29
    217     84      5      1      43     7 | 0       0    42g  84 .4g  1 .83g     76 user: 10.5 %          0       0 | 0     0 | 0    64k    56m    14  PRI   16 : 31 : 30
      1     73      3     * 0       4     4 | 0       0    42g  84 .4g  1 .81g     18  user: 6.2 %          0       0 | 0     0 | 0     9k    41m    14  PRI   16 : 31 : 31
     * 0     56      5     * 0      12     4 | 0       0    42g  84 .4g   1 .8g     17  user: 0.6 %          0       0 | 0     0 | 0     8k    43m    14  PRI   16 : 31 : 32
      2     78      5      1      45     7 | 0       0    42g  84 .4g   1 .8g     16  user: 6.6 %          0       0 | 0     0 | 0    17k    16m    14  PRI   16 : 31 : 33
     * 0     84      4      1       6     6 | 0       0    42g  84 .4g  1 .78g     67  user: 8.4 %          0       0 | 0     4 | 0    10k     8m    14  PRI   16 : 31 : 34

相似vmstat, 每秒鐘會打印一行數據。

 

insert query update delete分別表明一秒鐘以內執行的操做次數。

res是mongod所佔用的物理內存, faluts表示page faults的次數。

locked db是一個字段。 2.2以前是用locked字段。 2.2以後纔有這個字段。 這個字段的含義, 不是太明白。 只能明確1點, 即展現的是全部db裏面鎖定時間 最長的db 。 能夠參詳一下官網原文:

 

?
1
2
3
The percent of time in the per-database context-specific lock. mongostat will report the database that has spent the most time since the last mongostat call with a write lock.
 
This value represents the amount of time that the listed database spent in a locked state combined with the time that the mongod spent in the global lock. Because of this , and the sampling method, you may see some values greater than 100 %.

index miss是索引缺失的數量

 

qr|qw 表示在隊列中等待的客戶端。 rw表示讀和寫。

ar|aw 表示正在進行請求的客戶端。 rw表示讀和寫。 至於爲何爲0我也不是很明白。

netIn 和 netOut表示網絡流量,單位是字節 byte.

conn表示鏈接數,這個沒有什麼好說。

repl表示同步狀態。官網給出文檔是這樣:

 

?
1
2
3
4
5
M   master
SEC     secondary
REC     recovering
UNK     unknown
SLV     slave

在我mongo 2.4.8的機器上,

 

PRI表示主機。SLV表示從機。

4 profiling

profiling是設置一個全server級別的慢日誌,將慢查詢保存下來。 慢查詢的數據會保存到 system.profile中。

打開profiling:

?
1
2
>db.setProfilingLevel(1,1000)
{ "was" : 0, "slowms" : 20, "ok" : 1 }

第一個參數表示Profile的級別, 第二個參數是定義慢查詢的閾值。

profile級別0不保存, 1只保存慢查詢,2保存全部查詢。

注意級別是對應當前的數據庫, 而閾值是全局的。

查看profiling狀態:

?
1
2
>db.getProfilingStatus()
{ "was" : 1, "slowms" : 1000 }

關閉profiling:

?
1
>db.setProfilingLevel(0, 1000)

查看慢查詢, 其實就是在system.profile裏查: 

?
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
db.system.profile.find({ "op" : "query" }).sort({ "ts" :-1}).limit(1).pretty()
{
         "op" : "query" ,
         "ns" : "user.channels" ,
         "query" : {
                 "$query" : {
                         "usrID" : "364076" ,
                         "status" : 1
                 },
                 "orderby" : {
                         "num" : 1
                 }
         },
         "ntoreturn" : 0,
         "ntoskip" : 0,
         "nscanned" : 544,
         "scanAndOrder" : true ,
         "keyUpdates" : 0,
         "numYield" : 20,
         "lockStats" : {
                 "timeLockedMicros" : {
                         "r" : NumberLong(1328924),
                         "w" : NumberLong(0)
                 },
                 "timeAcquiringMicros" : {
                         "r" : NumberLong(1775760),
                         "w" : NumberLong(54728)
                 }
         },
         "nreturned" : 544,
         "responseLength" : 92082,
         "millis" : 1777,
         "ts" : ISODate( "2014-01-01T11:45:02.156Z" ),
         "client" : "127.0.0.1" ,
         "allUsers" : [ ],
         "user" : ""
}

具體的字段含義我只能猜一下, nscanned是掃描的記錄數, 鎖狀態裏面的應該是鎖定和獲取鎖的時間。能夠看到這個查詢幾乎全部的時間都用在等待一把讀鎖的釋放。 millis是執行的時間。

最後注意, system.profile是固定大小的collection, 默認大小是1M。 若是要修改該大小, 用下面的方法:

?
1
2
3
4
5
6
7
db.setProfilingLevel(0)
 
db.system.profile.drop()
 
db.createCollection( "system.profile" , { capped: true , size:4000000 } )
 
db.setProfilingLevel(1)

 

 

 

5 mongotop

mongotop能夠顯示collection級別的運行時間:

?
1
2
3
4
5
6
7
ns       total        read       write              2014-01-01T11:54:14
           admin.system.indexes         0ms         0ms         0ms
             admin.system.users         0ms         0ms         0ms
              local.oplog.$main         0ms         0ms         0ms
                   local.slaves         0ms         0ms         0ms
              local.startup_log         0ms         0ms         0ms
           local.system.indexes         0ms         0ms         0ms

total = read+write

mongotop和vmstat的參數同樣,能夠指定間隔時間。

6 web監控界面

通常是mongod服務器的28017端口。

 

第一部份是服務基本信息。

第二部份是當前的client的監控。 能夠看到鎖的類型, 和是否等待和查詢信息。

第三部份是dbtop, 和mongotop結果相似。

第四部份是log。

相關文章
相關標籤/搜索