下载mongodb-database-tools后就自带了mongostat命令
使用mongostat
使用超级管理员查看admin库 1 是间隔1秒的意思
./mongostat -h 127.0.0.1:27020 -u superadmin --password=password --authenticationDatabase=admin 1
-
insert query update delete getmore command :
在最近的一秒钟发生的操作。
-
getmore:
是针对一些游标操作,第一次拿了100条,而游标返回了10000w条,需要一次次抓回来,这里表示有多少个getmore在执行
-
command :
表示除了增删改查,包含增删改查,包括index等状态的命令都是通过command 来完成的
- dirty :
mongodb是通过内存来缓存和增加数据,mongodb通过缓存来管理一些数据,默认是百分之60的内存使用,在这些内存之间有多少是被更新的,修改的,或者插入的。这些操作且没有刷盘的,就是dirty。这里的百分比表示没有刷盘的占用百分比。如果没有超过百分之5,后台程序会5分钟刷一次数据到盘上。如果百分比超过5,后台会启动程序自动把这些刷到盘上。从而尽量的保证在百分之5以下。而一旦超过百分之20,mongodb可能会停止接受前面的请求也要将数据刷到盘上,也就是超过百分之20时阻塞新请求。这种情况,要么是刷盘跟不上,磁盘IO跟不上。要么是写入压力太大。
- used :
默认是百分之60的内存使用,百分之60的内存已经有百分之多少被使用了。低于百分之80的时候,mongdb不会做什么事情,超过百分之80开始清理动作,基于一些很久没有被使用的数据剔除,缓存清理动作。超过百分之95时阻塞新请求,并专注于清理缓存。
- vsize :使用的内存大小
- res: 实际使用的内存大小
- qrw /arw : 超过10存在等待
- net_in /net_out : 进出
- conn : 连接数
使用mongotop
./mongotop -h 127.0.0.1:27020 -u superadmin --password=password --authenticationDatabase=admin 2
间隔2秒抓一次
- ns : 来源库
- total:总时间消耗
- read:读时间消耗
- write:写时间消耗
使用日志
配置
db.getProfilingStatus()查看是否开启
rs02:PRIMARY> db.getProfilingStatus()
{
"was" : 1,
"slowms" : 10,
"sampleRate" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1628512885, 1),
"signature" : {
"hash" : BinData(0,"RXoRmbr9npCqd6IxClxVYWeIjzg="),
"keyId" : NumberLong("6993996578134425604")
}
},
"operationTime" : Timestamp(1628512885, 1)
}
设置:db.setProfilingLevel(level, slowms)
查看:db.system.profile.find()
- evel:0,关闭;1,记录慢速操作;2,记录所有操作。
- slowms:时间阈值,单位ms。
表示10毫秒的:db.setProfilingLevel( 1 , 10);
默认100ms
示例
2019-10-25T11:20:30.775+0800 I COMMAND [conn12] command test.test
appName: "MongoDB Shell" command: find { find: "test", filter: { i: 10000.0 },
$db: "test" } planSummary: COLLSCAN keysExamined:0 docsExamined:27108
cursorExhausted:1 numYields:211 nreturned:1 reslen:243 locks:{ Global:
{ acquireCount: { r: 424 } }, Database: { acquireCount: { r: 212 } }, Collection:
{ acquireCount: { r: 212 } } } protocol:op_command 19ms
- docsExamined : 扫描文档数
- locks: 锁信息
- numYields: 执行计划
- durationMillis: 执行时间
mtools
https://github.com/rueckstiess/mtools/releases
https://github.91chifun.workers.dev//https://github.com/rueckstiess/mtools/archive/refs/tags/v1.6.4.tar.gz
mtools可以分析mongo日志
yum install python3 -y
tar xf v1.6.4.tar.gz && cd mtools-1.6.4
python3 setup.py install
常用指令:• mplotqueries 日志文件:将所有慢查询通过图表形式展现;• mloginfo --queries 日志文件:总结出所有慢查询的模式和出现次数、消耗时间等;