MongoDB性能监控
-
一、概述
对于DB的监控也是至关重要的,数据库性能什么时候突然开始变慢,负载什么时候又变高,还有我们的MongoDB
的性能有没有可以优化的空间等等,我们都可以通过监控来判断,Oracle有自带的监控工具OEM,那我们的MongoDB的监控
又是怎样的情况的呢,接下来我们一起来了解下
二、MongoDB监控工具
1、命令mongotop
跟Linux的top命令用法类似,主要是监控MongoDB实例读写数据的情况,默认每秒返回监控读写情况
安装mongodb后在对应的bin目录下执行,例如:
[root@mongotest1 bin]# ./mongotop 2018-06-22T15:39:59.391+0800 connected to: 127.0.0.1 ns total read write 2018-06-22T15:40:00+08:00 admin.system.roles 0ms 0ms 0ms admin.system.users 0ms 0ms 0ms admin.system.version 0ms 0ms 0ms db_test.col_test 0ms 0ms 0ms local.me 0ms 0ms 0ms local.oplog.$main 0ms 0ms 0ms local.startup_log 0ms 0ms 0ms local.system.replset 0ms 0ms 0ms mongotest.employee 0ms 0ms 0ms test.mongodb 0ms 0ms 0ms
参数一览表
ns:数据库命名空间(namespace),包含数据库的名称和集合
total:总耗时
read:读取大量数据所用时间
write:写入数据所用时间
关于mongotop的相关参数用法,可以通过--help查看
[root@mongotest1 bin]# ./mongotop --help
如果想修改默认输出的时间间隔,可以直接在后面加数字,单位是秒,如下:
[root@mongotest1 bin]# ./mongotop 5 --这样就会每隔5秒输出一次结果
2、命令mongostat
mongostat与mongotop都是mongoDB自带的监控工具,安装后在bin目录下可以查看到,mongostat主要是查看当前MongoDB
运行的状态及性能情况,是实时统计以便于我们及时发现数据库的问题,具体操作如下:
[root@mongotest1 bin]# ./mongostat insert query update delete getmore command % dirty % used flushes vsize res qr|qw ar|aw netIn netOut conn time *0 *0 *0 *0 0 1|0 0.0 0.0 0 395.0M 37.0M 0|0 0|0 79b 18k 1 2018-06-22T16:25:25+08:00 *0 *0 *0 *0 0 1|0 0.0 0.0 0 395.0M 37.0M 0|0 0|0 79b 18k 1 2018-06-22T16:25:26+08:00 *0 *0 *0 *0 0 1|0 0.0 0.0 0 395.0M 37.0M 0|0 0|0 79b 18k 1 2018-06-22T16:25:27+08:00 *0 *0 *0 *0 0 1|0 0.0 0.0 0 395.0M 37.0M 0|0 0|0 79b 18k 1 2018-06-22T16:25:28+08:00 *0 *0 *0 *0 0 1|0 0.0 0.0 0 395.0M 37.0M 0|0 0|0 79b 18k 1 2018-06-22T16:25:29+08:00 *0 *0 *0 *0 0 1|0 0.0 0.0 0 395.0M 37.0M 0|0 0|0 79b 18k 1 2018-06-22T16:25:30+08:00 *0 *0 *0 *0 0 1|0 0.0 0.0 0 395.0M 37.0M 0|0 0|0 79b 18k 1 2018-06-22T16:25:31+08:00 *0 *0 *0 *0 0 1|0 0.0 0.0 0 395.0M 37.0M 0|0 0|0 79b 18k 1 2018-06-22T16:25:32+08:00 *0 *0 *0 *0 0 1|0 0.0 0.0 0 395.0M 37.0M 0|0 0|0 79b 18k 1 2018-06-22T16:25:33+08:00
关键参数一览表
insert:每秒写入的数量
query:每秒查询的数量
update:每秒更新的数量
delete:每秒删除的数量
getmore:每秒执行getmore操作的数量
command:每秒执行数据库命令的数据量
mongostat同样可以使用 --help查看对应参数的使用情况,这里就不详细列举了
3、db.stats()
主要是用于获取当前数据库的一些相关信息,用法如下:
MongoDB Enterprise > db test MongoDB Enterprise > db.stats() { "db" : "test", "collections" : 7, "objects" : 23, "avgObjSize" : 58.78260869565217, "dataSize" : 1352, "storageSize" : 204800, "numExtents" : 0, "indexes" : 8, "indexSize" : 221184, "ok" : 1 }
参数一览表
"db" : 数据库名称
"collections" : 集合数量
"objects" : 对象个数
"avgObjSize" : 平均每个对象的大小
"dataSize" : 当前数据库所有数据总大小
"storageSize" : 当前数据库占用磁盘大小
"numExtents" : 数据库所有集合中的片区计数
"indexes" : 索引数量
"indexSize" : 所有索引占用磁盘的大小
4、db.serverStatus()
主要是用于获取服务器的运行状态,查看到的是一些静态的数据,比前面讲到的mongtop和mongostat信息更加详细和具体
MongoDB Enterprise > db.serverStatus() { "host" : "mongotest1", "advisoryHostFQDNs" : [ ], "version" : "3.2.8", "process" : "mongod", "pid" : NumberLong(31107), "uptime" : 88111, "uptimeMillis" : NumberLong(88110420), "uptimeEstimate" : 84444, "localTime" : ISODate("2018-06-22T09:14:09.092Z"), "asserts" : { "regular" : 0, "warning" : 0, "msg" : 0, "user" : 0, "rollovers" : 0 }, "connections" : { "current" : 1, "available" : 818, "totalCreated" : NumberLong(23) }, "extra_info" : { "note" : "fields vary by platform", "heap_usage_bytes" : 62033648, "page_faults" : 183 }, "globalLock" : { //这里省略部分代码
关键参数一览表
"host" : 主机名
"version" : 版本号
"process" : 进程名称
"pid" : NumberLong(31107),
"uptimeMillis" : NumberLong(88110420)
"localTime" : 当前时间
三、总结
通过了解MongoDB的性能监控情况后,方便我们监控和排查数据库的一些问题。对于监控这块,应该还有其他一些方法,
就像mongodb厂商还提供MongoDB Monitoring Service(MMS)监控服务,这个应该要怎样使用呢,我们可以在这里讨论下,
如果已经知道如何使用MMS服务的,也可以在这里分享下心得。