MongoDB性能监控


  • Lv 1

    一、概述

    对于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服务的,也可以在这里分享下心得。


登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待