1. 程式人生 > >mongodb監控常用方法

mongodb監控常用方法

正在 com admin gost function 內存 dir body 0ms

列舉mongodb監控的常用命令

1.監控統計

mongostat 可用於查看當前QPS/內存使用/連接數,以及多個shard的壓力分布

命令參考

./mongostat --port 27071  -u admin -p xxx --authenticationDatabase=admin --discover -n 30 3

參數說明
-discover 提供集群中所有節點的狀態
-n 30 3 表示輸出30次,每次休眠3秒鐘

輸出示例

                   insert query update delete getmore command  %dirty  %used flushes mapped vsize   res faults qr|qw  ar|aw netIn netOut conn    set repl                      time
185.1.12.101:10001    499  4886   2042   1612     237   756|0     3.8   80.1       0        28.5G 19.1G    n/a   3|0    1|1    4m     7m 5545 shard0  PRI 2017-03-06T11:48:17+08:00

指標說明

指標名 說明
inserts/s 每秒插入數
query/s 每秒查詢數
update/s 每秒更新數
delete/s 每秒刪除數
getmore/s 每秒getmore數
command/s 每秒命令數,涵蓋了增刪改查和其他操作
dirty/% WriedTiger引擎參數,緩存中無效數據百分比
used/% WriedTiger引擎參數,正在使用的緩存百分比
flushs/s 每秒執行fsync將數據寫入硬盤次數
mapped/MB 所有的被mmap的數據量
vsize/MB 虛擬內存使用量
res/MB 物理內存使用量
faults/s 每秒訪問失敗數,與內存swap有關
qrqw 客戶端讀寫等待隊列數量,高並發時,一般隊列值會升高
araw 客戶端讀寫活躍個數
netIn 網絡接收數據量
netOut 網絡發送數據量
conn 當前連接數
set 所屬集合(分片)
repl 復制狀態(主節點/二級節點..)
time 時間戳

官方說明
https://docs.mongodb.com/manual/reference/program/mongostat/

2.熱點操作

mongotop 用於查看當前占用比例較高的DB操作,即熱點操作。

命令參考

./mongotop --port 10001  -u admin -p xxx --authenticationDatabase=admin

輸出示例

    ns                  total   read    write   2017-03-20T15:22:36+08:00
    nscl.T_De**ata      407ms   266ms   140ms                             
    nscl.T_OAUT**EN     251ms   242ms   8ms                             
    nscl.T_Subs**tion   180ms   180ms   0ms                             
    nscl.T_De**istory   61ms    0ms     61ms                             

官方說明
https://docs.mongodb.com/manual/reference/program/mongotop/

3.慢操作檢測

profile是mongodb實現慢操作檢測的模塊,官方說明

連接shell(使用root)

./mongo --port 10001  -u root -p xxx --authenticationDatabase=admin
use admin

註意
profile操作必須連接mongod進程,而mongos無法執行此類操作

profile設置

db.setProfilingLevel(0) 不輸出慢查詢
db.setProfilingLevel(1,100) 統計慢查詢,100ms是閾值
db.setProfilingLevel(2) 統計所有操作
db.getProfilingLevel()

查詢慢查詢

db.system.profile.find().limit(10).sort( { ts : -1 } ).pretty() 
db.system.profile.find().limit(10).sort( { millis : -1 } ).pretty()

查詢當前操作

db.currentOp()
  • 樣例-查詢等待鎖的增刪改查

    db.currentOp(
       {
     "waitingForLock" : true,
     $or: [
        { "op" : { "$in" : [ "insert", "update", "remove" ] } },
        { "query.findandmodify": { $exists: true } }
    ]
       }
    )
  • 樣例-查詢活躍query操作

    db.currentOp(true).inprog.forEach(
       function(opDoc){
     if(!opDoc.active && opDoc.op=='query')
        printjson(d)
     }
     )

    currentOp更多說明

4. 集合狀態分析

數據庫狀態

db.stats()
->
{ 
  "db" : "test",           //當前數據庫 
  "collections" : 3,       //集合數量 
  "objects" : 165606718,   //對象數量 
  "avgObjSize" : 381,      //對象平均大小 
  "dataSize" : 63142130610, //所有數據總大小 
  "storageSize" : 16384,    //數據占磁盤大小 
  "numExtents" : 3, 
  "indexes" : 479,          //索引數 
  "indexSize" : 8011636736, //索引大小 
  "fileSize" : 201326592    //預分配給數據庫的文件大小 
} 

集合狀態

db.xxx.stats()
->
   ...
    "sharded" : true,      //是否分片
    "capped" : false,      //是否限制大小
    "ns" : "nscl.T_BUSINESS_LOG",
    "count" : 26541837,         //表數量
    "size" : 14991828070,       //表大小
    "storageSize" : 3615076352, //占磁盤大小
    "totalIndexSize" : 2640109568, //索引大小
    "avgObjSize" : 564.8376210734773,
    "nindexes" : 6,
    "nchunks" : 374         //chunk數量
   ...

mongodb監控常用方法