1、mongotop
#mongotop -h 127.0.0.1:27017 -u test -p test123 --authenticationDatabase admin
輸出說明:
- ns:包含數據庫命名空間,后者結合了數據庫名稱和集合。
- db:包含數據庫的名稱。名為 . 的數據庫針對全局鎖定,而非特定數據庫。
- total:mongod花費的時間工作在這個命名空間提供總額。
- read:提供了大量的時間,這mongod花費在執行讀操作,在此命名空間。
- write:提供這個命名空間進行寫操作,這mongod花了大量的時間。
2、mongostat
#mongostat -h 127.0.0.1:27017 -u test -p test123 --authenticationDatabase admin
- 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毫無壓力。高並發時,一般隊列值會升高。- conn 當前連接數
- time 時間戳
3、查看當前的option
Mongodb 的命令一般很快就完成,但是在一台繁忙的機器或者有比較慢的命令時,你可以通過db.currentOp()獲取當前正在執行的操作,在沒有負載的機器上,該命令基本上都是返回空的
>db.currentOp()
{ "opid" : "shard3:466404288", "active" : false, "waitingForLock" : false, "op" : "query", "ns" : "sd.usersEmails", "query" : { }, "client_s" : "10.121.13.8:34473", "desc" : "conn" },
如果發現一個操作太長,把數據庫卡死的話,可以用以下命令殺死他:
>db.killOp("shard3:466404288")
4、打開profiler,類似於mysql的slow_log慢查詢,默認是關閉的。
0:關閉,不收集任何數據。
1:收集慢查詢數據,默認是100毫秒。
2:收集所有數據
首先切換到需要打開慢查詢的庫
>use spark
>db.auth('test','test123')
>db.setProfilingLevel(2)
>db.getProfilingLevel()
可以自定義時間,單位是ms:
>db.setProfilingLevel(1,300)
查看:
>db.system.profile.find().sort({$natural:-1})
- ts:時間戳
- info:具體的操作
- millis:操作所花時間,毫秒
查看profiler的數量:
>db.system.profile.count();
查看影響的行數:
>db.system.profile.explain()
5、查看副本集同步延遲
> db.printSlaveReplicationInfo()
6、3.4版本以后默認的數據庫存儲引擎是wiredTiger,查看當前占用的內存
> db.runCommand({ serverStatus: 1}).wiredTiger.cache["bytes currently in the cache"]
16179710118
設置cacheSize為10G,根據自己的服務器情況指定:
>db.adminCommand({setParameter: 1, wiredTigerEngineRuntimeConfig: "cache_size=10G"})
{ "was" : "", "ok" : 1 }
上面的設置重啟后就失效了,可以寫進配置文件
systemLog: destination: file logAppend: true path: /data/log/mongodb.log storage: dbPath: /data/mongodata journal: enabled: true engine: wiredTiger wiredTiger: engineConfig: cacheSizeGB: 10 processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongod.pid net: port: 27017 # bindIp: 0.0.0.0 # Listen to local interface only, comment to listen on all interfaces. replication: replSetName: rs3 oplogSizeMB: 5000 security: keyFile: "/data/mongodb.key" clusterAuthMode: "keyFile" authorization: "enabled"