查看mongodb的状态

时间:2024-08-18 08:04:13

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"