mongodb 4、分析mongodb服务

             分析mongodb服务
一、服务状态统计
在某个控制节点执行如下命令
mongostat -uadmin -p password --authenticationDatabase admin
请将上述-p 后面的password,替换为mongodb中对应数据库的密码


显示结果的样例如下所示
insert query update delete getmore command % dirty % used flushes  vsize  res qr|qw ar|aw netIn netOut conn     time
    *0     1     *0     *0       0     2|0     0.0    0.1       0 357.0M 9.0M   0|0   1|0  385b    15k   27 12:17:06
    *0    *0     *0     *0       0     1|0     0.0    0.1       0 357.0M 9.0M   0|0   1|0   79b    15k   27 12:17:07
    *0    *0     *0     *0       0     1|0     0.0    0.1       0 357.0M 9.0M   0|0   1|0   79b    15k   27 12:17:08
解释:
inserts/s :每秒插入次数
query/s: 每秒查询次数
update/s:每秒更新次数
delete/s:每秒删除次数
getmore/s:每秒执行getmore次数
command/s:每秒的命令数,比以上插入、查找、更新、删除的综合还多,还统计了别的命令
dirty%: 仅仅针对WiredTiger引擎,脏数据字节的缓存百分比
used%:仅仅针对WiredTiger引擎,正在使用中的缓存百分比
flushes/s:每秒执行fsync将数据写入硬盘的次数
vsize:虚拟内存使用量,单位MB
res:物理内存使用量,单位MB
qr: 客户端等待从MongoDB实例读数据的队列长度
qw: 客户端等待从MongoDB实例写入数据的队列长度
ar:执行读操作的活跃客户端数量
aw:执行写操作的活跃客户端数量
netIn: MongoDB实例的网络进流量
netOut:MongoDB实例的网络出流量
conn:当前连接数
time:时间戳

参考
mongodb查询每秒的连接,负载,读写次数等情况
https://www.cnblogs.com/renyb/archive/2013/01/18/2866632.html
https://blog.csdn.net/u012150392/article/details/45889781

二、 数据库状况
执行如下命令
use database_name;
db.auth('database_name', 'xxx')
db.stats(): 

请将上述: 
database_name替换为真实数据库名称
db.auth('database_name', 'xxx') xxx 替换为该数据库的密码
示例结果如下:
> db.stats()
{
    "db" : "admin",
    "collections" : 2,
    "objects" : 5,
    "avgObjSize" : 413.6,
    "dataSize" : 2068,
    "storageSize" : 32768,
    "numExtents" : 0,
    "indexes" : 3,
    "indexSize" : 49152,
    "ok" : 1
}

解释:
 "collections" : 3,表示当前数据库有多少个collections.可以通过运行show collections查看当前数据库具体有哪些collection.
 "objects" : 13,表示当前数据库所有collection总共有多少行数据。显示的数据是一个估计值,并不是非常精确。
 "avgObjSize" : 36,表示每行数据是大小,也是估计值,单位是bytes
 "dataSize" : 468,表示当前数据库所有数据的总大小,不是指占有磁盘大小。单位是bytes
 "storageSize" : 13312,表示当前数据库占有磁盘大小,单位是bytes,因为mongodb有预分配空间机制,为了防止当有大量数据插入时对磁盘的压力,因此会事先多分配磁盘空间。
 "numExtents" : 3,似乎没有什么真实意义。我弄明白之后再详细补充说明。
 "indexes" : 1 ,表示system.indexes表数据行数。
 "indexSize" : 8192,表示索引占有磁盘大小。单位是bytes
  "fileSize" : 201326592,表示当前数据库预分配的文件大小,例如test.0,test.1,不包括test.ns。

参考:
https://www.cnblogs.com/xuegang/archive/2011/10/13/2209965.html


三、 服务器状态
执行如下命令
db.serverStatus()

示例结果如下:
db.serverStatus()  

      {
                "host" : "localhost.localdomain",
                "version" : "1.8.1",                                      --服务器版本
                "process" : "mongod",
                "uptime" : 3184,                                          --启动时间(秒)
                "uptimeEstimate" : 3174,                            
                "localTime" : ISODate("2012-05-28T11:20:22.819Z"),
         "globalLock" : {
                                "totalTime" : 3183918151,
                                "lockTime" : 10979,
                                "ratio" : 0.000003448267034299149,
                                "currentQueue" : {
                                                "total" : 0,                            --当前全部队列量
                                                "readers" : 0,                        --读请求队列量
                                                "writers" : 0                          --写请求队列量
                                    },
          "activeClients" : {
                                                "total" : 0,                              --当前全部客户端连接量
                                                "readers" : 0,                        --客户端读请求量
                                                "writers" : 0                          --客户端写请求量
                                          }
                                         },
            "mem" : {
                                "bits" : 32,                          --32位系统
                                "resident" : 20,                    --占用物量内存量
                                "virtual" : 126,                      --虚拟内存量
                                "supported" : true,              --是否支持扩展内存
                                "mapped" : 32
                                               },
            "connections" : {
                                "current" : 1,                      --当前活动连接量
                                "available" : 818                --剩余空闲连接量
                                                },
                                      ……
             "indexCounters" : {
                                "btree" : {
                                                "accesses" : 0,                        --索引被访问量
                                                "hits" : 0,                                --索引命中量
                                                "misses" : 0,                            --索引偏差量
                                                "resets" : 0,
                                                "missRatio" : 0                      --索引偏差率(未命中率)
                                }
                },
                                       ……
             "network" : {
                                "bytesIn" : 1953,                          --发给此服务器的数据量(单位:byte)
                                "bytesOut" : 25744,                      --此服务器发出的数据量(单位:byte)
                                "numRequests" : 30                    --发给此服务器的请求量
                },
             "opcounters" : {
                                "insert" : 0,                            --插入操作的量 

参数解释,参考:
https://blog.csdn.net/u012150392/article/details/45889781
http://www.cnblogs.com/xuegang/archive/2011/10/13/2210339.html


四、 慢查询检测
use database_name;
db.auth('database_name', 'xxx')
请将:
database_name替换为真实数据库名称
xxx替换为该数据库密码

可根据需要开启: 建议可将下面查询时间为100 ms,修改为实际情况
(例如10000 ms)
db.setProfilingLevel(1, 100);

解释:
0 - 不开启(默认是为0,不开启)
1 - 记录慢命令(默认为>100ms)
2 - 记录所有慢命令
语法:
db.setProfilingLevel(level, slowms)

慢查询的结果存储在system.profile 的集合中
查看慢查询结果,执行如下命令:
命令1:查询所有慢查询结果
db.system.profile.find()
命令2:查询最新的记录
db.system.profile.find().sort({$natural:-1})
命令3:查看最近5条记录
show profile

参考:
https://www.cnblogs.com/wolf-sun/p/5558530.html
https://www.cnblogs.com/renyb/archive/2013/01/18/2866632.html


五、查看集合索引
如果mongodb某个集合查询过慢,有可能是该集合中没有建立相关索引。
下面是查询某集合索引的方法。
db.COLLECTION_NAME.getIndexes()
例如可以看到下面的结果
>db.sites.getIndexes()
[
  {
        "v" : 1,
        "key" : {
          "_id" : 1
        },
        "name" : "_id_",
        "ns" : "newDB.sites"
  },
  {
        "v" : 1,
        "key" : {
          "name" : 1,
          "domain" : -1
        },
        "name" : "name_1_domain_-1",
        "ns" : "newDB.sites"
  }
]
参考:
https://blog.csdn.net/salmonellavaccine/article/details/53907535

参考文章:
[1] https://www.cnblogs.com/renyb/archive/2013/01/18/2866632.html
[2] https://blog.csdn.net/u012150392/article/details/45889781
[3] https://www.cnblogs.com/xuegang/archive/2011/10/13/2209965.html
[4] https://blog.csdn.net/u012150392/article/details/45889781
[5] http://www.cnblogs.com/xuegang/archive/2011/10/13/2210339.html
[6] https://www.cnblogs.com/wolf-sun/p/5558530.html
[7] https://www.cnblogs.com/renyb/archive/2013/01/18/2866632.html
[8] https://blog.csdn.net/salmonellavaccine/article/details/53907535
 

猜你喜欢

转载自blog.csdn.net/qingyuanluofeng/article/details/81218008