分析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