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:
processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongod.pid
net:
port:
# bindIp: 0.0.0.0 # Listen to local interface only, comment to listen on all interfaces.
replication:
replSetName: rs3
oplogSizeMB:
security:
keyFile: "/data/mongodb.key"
clusterAuthMode: "keyFile"
authorization: "enabled"