MongoDB多緯度監控方法詳解

一、mongostat工具方法
mongostat是mongdb自帶的狀態檢測工具,在命令行下使用。它會間隔固定時間獲取mongodb的當前運行狀態,並輸出。如果你發現數據庫突然變慢或者有其他問題的話,你第一手的操作就考慮採用mongostat來查看mongo的狀態。
mongostat命令參數
--help : 查看幫助信息
--version : 查看mongodb版本號
--host : 要連接的主機同時也可以指定端口
--port : 如果—host不指定端口在這單獨指定
--sslCAFile : 指定對應的CA密鑰位置
--username : 用戶
--password : 密碼
mongostat命令基本格式
mongostat --rowcount 2 1 --host 192.168.0.8:27027
輸出參數說明
inserts/s : 每秒插入次數
query/s :每秒查詢次數
update/s :每秒更新次數
delete/s :每秒刪除次數
getmore/s :每秒執行getmore次數
command/s :每秒的命令數,比以上插入、查找、更新、刪除的綜合還多,還統計了別的命令
flushs/s :每秒執行fsync將數據寫入硬盤的次數。
mapped/s :所有的被mmap的數據量,單位是MB,
vsize :虛擬內存使用量,單位MB
res :物理內存使用量,單位MB
faults/s :每秒訪問失敗數(只有Linux有),數據被交換出物理內存,放到swap。不要超過100,否則就是機器內存太小,造成頻繁swap寫入。此時要升級內存或者擴展
locked % :被鎖的時間百分比,儘量控制在50%以下吧
idx miss % :索引不命中所佔百分比。如果太高的話就要考慮索引是不是少了
q t|r|w :當Mongodb接收到太多的命令而數據庫被鎖住無法執行完成,它會將命令加入隊列。這一欄顯示了總共、讀、寫3個隊列的長度,都爲0的話表示mongo毫無壓力。高併發時,一般隊列值會升高。
ar : 活躍客戶執行寫操作的數量。
conn :當前連接數
time :時間戳
二、mongo內置函數方法
db.stat()函數
獲取當前數據庫的信息,比如Obj總數、數據庫總大小、平均Obj大小等

use test
switched to db test
db.stats()
{
"collections" : 9,
"objects" : 4278845,
"avgObjSize" : 224.56603031892953,
"dataSize" : 960883236,
"storageSize" : 1195438080,
"numExtents" : 59,
"indexes" : 13,
"indexSize" : 801931264,
"fileSize" : 6373244928,
"ok" : 1
}

輸出參數說明
collections : 表示當前數據庫有多少個collections.可以通過運行show collections查看當前數據庫具體有哪些collection.
objects: 表示當前數據庫所有collection總共有多少行數據。顯示的數據是一個估計值,並不是非常精確。
avgObjSize :表示每行數據是大小,也是估計值,單位是bytes
 “dataSize” : 468,表示當前數據庫所有數據的總大小,不是指佔有磁盤大小。單位是bytes
storageSize : 13312,表示當前數據庫佔有磁盤大小,單位是bytes,因爲mongodb有預分配空間機制,爲了防止當有大量數據插入時對磁盤的壓力,因此會事先多分配磁盤空間。
numExtents : 似乎沒有什麼真實意義。我弄明白之後再詳細補充說明。
indexes : 表示system.indexes表數據行數。
indexSize : 表示索引佔有磁盤大小。單位是bytes
fileSize : 表示當前數據庫預分配的文件大小,例如test.0,test.1,不包括test.ns。
db.serverStatus()函數
獲取服務器的狀態
{
"version" : "1.6.5",
"uptime" : 7208469,
"uptimeEstimate" : 7138829,
"localTime" : "Wed Oct 26 2011 22:23:07 GMT+0800 (CST)",
"globalLock" : {
"totalTime" : 7208469556704,
"lockTime" : 4959693717,
"ratio" : 0.000688036992871448,
"currentQueue" : {
"total" : 0,
"readers" : 0,
"writers" : 0
}
},
"mem" : {
"bits" : 64,
"resident" : 3131,
"virtual" : 6172,
"supported" : true,
"mapped" : 4927
},
"connections" : {
"current" : 402,
"available" : 2599
},
"extra_info" : {
"note" : "fields vary by platform",
"heap_usage_bytes" : 832531920,
"page_faults" : 8757
},
"indexCounters" : {
"btree" : {
"accesses" : 2821726,
"hits" : 2821725,
"misses" : 1,
"resets" : 0,
"mi***atio" : 3.543930204420982e-7
}
},
"backgroundFlushing" : {
"flushes" : 120133,
"total_ms" : 73235923,
"average_ms" : 609.6236920746173,
"last_ms" : 1332,
"last_finished" : "Wed Oct 26 2011 22:22:23 GMT+0800 (CST)"
},
"cursors" : {
"totalOpen" : 0,
"clientCursors_size" : 0,
"timedOut" : 238392
},
"repl" : {
"ismaster" : true
},
"opcounters" : {
"insert" : 269351,
"query" : 19331151,
"update" : 14199331,
"delete" : 1,
"getmore" : 145575,
"command" : 55982302
},
"asserts" : {
"regular" : 0,
"warning" : 0,
"msg" : 0,
"user" : 27,
"rollovers" : 0
},
"ok" : 1
}

輸出參數說明
Host : 運行實例所監聽的IP與端口
version : 當前實例所使用的版本
Process : 當前實例是mongod,還是mongos
Uptime : 實例連續正常運行時間,單位秒
uptimeEstimate : 基於mongodb內部粗粒定時器的連續正常運行時間
globalLock.totalTime : 自實例啓動全局鎖創建以來到現在多長時間,單位微秒.
globalLock.lockTime : 自全局鎖創建以來鎖定總時間,單位微秒
globalLock.ratio : 鎖定的時間所佔的比例(lockTime/ totalTime)
globalLock.currentQueue.total : 當前等待全局鎖的數量
globalLock.currentQueue.readers : 當前等待讀鎖的數量
globalLock.currentQueue.writers : 當前等待寫鎖的數量
globalLock.activeClients.total : 連接到當前實例處於活動狀態的客戶端數量。
globalLock.activeClients.readers : 處於活動狀態的客戶端中有多少是在執行read操作
globalLock.activeClients.writers : 處於活動狀態的客戶端中有多少是在執行write操作
Mem.resident : 到現在總共使用的物理內存,單位是MB
Mem.virtual : 當前Mongodb實例使用的虛擬內存大小,單位MB,一般情況下比mem.map的值要超大一點,如果大很多很有可能發生內存泄露,如果使用journal,大約是2倍的map值
Mem.maped : Mongodb使所有數據都映射到內存中,所以這個值可以看似整個數據量的值。
Mem.bits : 機器位數,32位或64位
Mem.supported : 本機是否支持內存擴展
Connections.current : 當前連接到本機處於活動狀態的連接數
Connections. available : 剩餘多少可供連接
extra_info. heap_usage_bytes : 當前實例堆大小,單位bytes
extra_info. page_faults : 加載磁盤內容時發生頁錯誤的次數
indexCounters. Btree.accesses : 訪問索引次數
indexCounters. Btree.hits : 訪問索引時,索引在內存中被命中的次數
indexCounters. Btree.misses : 訪問索引時,索引不是在內存中被命中的次數
indexCounters. Btree.resets : 索引計數器被重置的次數
indexCounters. Btree.mi***atio : 索引非命中率
backgroundFlushing.flushes : 實例刷新數據到磁盤的數次
backgroundFlushing.total_ms : 刷新到磁盤總共花費的時間,單位毫秒
backgroundFlushing.average_ms : 平均每次刷新執行時間
backgroundFlushing.last_ms : 最後一次刷新執行時間
backgroundFlushing.last_finished : 最後一次刷新完成的時間點
Cursors.totalOpen : 當前遊標數量
Cursors.timeOut : 從實例啓動到現在遊標超時的總數量
Network.bytesIn : 發送到實例的字節大小
Network.bytesOut : 發送出去的字節大小
Repl.setName : replSet結構定義的名稱
Repl.isMaster : 當前實例是否是replSet結構中的Master節點
Repl.secondary : 當前實例是否是replSet結構中的secondary節點
Repl.hosts : replSet結構中每個節點情況
Opcounters.insert : 自實例啓動以來,執行insert次數
Opcounters.query : 自實例啓動以來,執行query次數
Opcounters.update : 自實例啓動以來,執行update次數
Opcounters.delete : 自實例啓動以來,執行delete次數
Opcounters.getmore : 自實例啓動以來,在遊標執行getMore次數
Opcounters.command : 自實例啓動以來,執行其他操作的次數
Asserts.regular : 自實例啓動以來,斷言正常的次數
Asserts.warn : 自實例啓動以來,斷言警告的次數
Asserts.msg : 自實例啓動以來,斷言內部錯誤的次數
Asserts.user : 自實例啓動以來,因用戶使用造成的錯誤而被斷言次數
Asserts.rollovers : 斷言被翻轉的次數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章