標籤:
方法一:Mongostat
此工具可以快速查看某組運行中的mongodb執行個體的統計資訊,用法如下:
[[email protected] bin]# ./mongostatinsert query update delete ...... locked % idx miss % qr|qw ar|aw conn time*0 *0 *0 *0 ...... 0 0 0|0 1|0 4 01:19:15*0 *0 *0 *0 ...... 0 0 0|0 1|0 4 01:19:16*0 *0 *0 *0 ...... 0 0 0|0 1|0 4 01:19:17
它每秒鐘重新整理一次狀態值,提供良好的可讀性,通過這些參數可以觀察到一個整體的效能情況。
欄位說明:
insert: 每秒插入量
query: 每秒查詢量
update: 每秒更新量
delete: 每秒刪除量
locked: 鎖定量
qr | qw: 用戶端查詢排隊長度(讀|寫)
ar | aw: 活躍用戶端量(讀|寫)
conn: 串連數
time: 目前時間
方法二:db.serverStatus
這個命令最常用
> db.serverStatus(){"host" : "localhost.localdomain","version" : "1.8.1", --伺服器版本"process" : "mongod","uptime" : 3184, --啟動時間(秒)"uptimeEstimate" : 3174,"localTime" : ISODate("2012-05-28T11:20:22.819Z"),"globalLock" : {"totalTime" : 3183918151,"lockTime" : 10979,"ratio" : 0.000003448267034299149,"currentQueue" : {"total" : 0, --當前全部隊列量"readers" : 0, --讀請求隊列量"writers" : 0 --寫請求隊列量},"activeClients" : {"total" : 0, --當前全部用戶端串連量"readers" : 0, --用戶端讀請求量"writers" : 0 --用戶端寫請求量}},"mem" : {"bits" : 32, --32 位系統"resident" : 20, --佔用物量記憶體量"virtual" : 126, --虛擬記憶體量"supported" : true, --是否支援擴充記憶體"mapped" : 32},"connections" : {"current" : 1, --當前活動串連量"available" : 818 --剩餘空閑串連量},……"indexCounters" : {"btree" : {"accesses" : 0, --索引被訪問量"hits" : 0, --索引命中量"misses" : 0, --索引偏差量"resets" : 0,"missRatio" : 0 --索引偏差率(未命中率)}},……"network" : {"bytesIn" : 1953, --發給此伺服器的資料量(單位:byte)"bytesOut" : 25744, --此伺服器發出的資料量(單位:byte)"numRequests" : 30 --發給此伺服器的請求量},"opcounters" : {"insert" : 0, --插入操作的量"query" : 1, --查詢操作的量"update" : 0, --更新操作的量"delete" : 0, --刪除操作的量"getmore" : 0,"command" : 31 --其它操作的量},……"ok" : 1}> 方法三:db.stats db.stats 查看資料庫狀態資訊 > db.stats(){"db" : "test","collections" : 7, --collection 數量"objects" : 28, --對象數量"avgObjSize" : 50.57142857142857, --對象平均大小"dataSize" : 1416, --資料大小"storageSize" : 31744, --資料大小(含預分配空間)"numExtents" : 7, --事件數目量"indexes" : 7, --索引數量"indexSize" : 57344, --索引大小"fileSize" : 50331648, --檔案大小"ok" : 1 --本次取stats 是否正常}>View Code
方法三:profile
mongodb可以通過profile來監控資料,進行最佳化。查看當前是否開啟profile功能用命令db.getProfilingLevel() 返回level等級,值為0|1|2,分別代表意思:0代表關閉,1代表記錄慢命令,2代表全部開始profile功能為db.setProfilingLevel(level); #level等級,值同上level為1的時候,慢命令預設值為100ms,更改為db.setProfilingLevel(level,slowms)如db.setProfilingLevel(1,50)這樣就更改為50毫秒通過db.system.profile.find() 查看當前的監控日誌。
> db.system.profile.find({millis:{$gt:500}}){ "ts" : ISODate("2011-07-23T02:50:13.941Z"), "info" : "query order.order reslen:11022 nscanned:672230 \nquery: { status: 1.0 } nreturned:101 bytes:11006 640ms", "millis" : 640 }{ "ts" : ISODate("2011-07-23T02:51:00.096Z"), "info" : "query order.order reslen:11146 nscanned:672302 \nquery: { status: 1.0, user.uid: { $gt: 1663199.0 } } nreturned:101 bytes:11130 647ms", "millis" : 647 }
這裡值的含義是
ts:命令執行時間
info:命令的內容
query:代表查詢
order.order: 代表查詢的庫與集合
reslen:返回的結果集大小,byte數
nscanned:掃描記錄數量
nquery:後面是查詢條件
nreturned:返回記錄數及用時
millis:所花時間
如果發現時間比較長,那麼就需要作最佳化。
比如nscanned數很大,或者接近記錄總數,那麼可能沒有用到索引查詢。
reslen很大,有可能返回沒必要的欄位。
nreturned很大,那麼有可能查詢的時候沒有加限制。
MongoDB整理筆記の效能監控