MongoDB运行状态、性能监控,分析
不好意思,由于转载的网址设置了防盗链,所以图片显示不出来,可以点击下面的链接看原问,我的目的就是想和大家分享一下。
转自:http://blog.nosqlfan.com/html/3346.html
使用任何一个产品,必不可少的一项工作就是对存储的
它的输出有以下几列:
类似于MySQL的slow log, MongoDB可以监控所有慢的以及不慢的查询。
查看Profile日志
> db.system.profile.find().sort({$natural:-1}){"ts" : "Thu Jan 29 2009 15:19:32 GMT-0500 (EST)" , "info" :"query test.$cmd ntoreturn:1 reslen:66 nscanned:0 query: { profile: 2 } nreturned:1 bytes:50" ,"millis" : 0} ...
3个字段的意义
不多说,此处有官方文档。注意,造成满查询可能是索引的问题,也可能是数据不在内存造成因此磁盘读入造成。
Mongodb自带了Web控制台,默认和数据服务一同开启。他的端口在Mongodb数据库服务器端口的基础上加1000,如果是默认的Mongodb数据服务端口(Which is 27017),则相应的Web端口为28017
这个页面可以看到
可以参考右边的截图
获取当前数据库的信息,比如Obj总数、数据库总大小、平均Obj大小等
> use testswitched to db test> db.stats(){?? ?"collections" : 9,?? ?"objects" : 4278845,?? ?"avgObjSize" : 224.56603031892953,?? ?"dataSize" : 960883236,?? ?"storageSize" : 1195438080,?? ?"numExtents" : 59,?? ?"indexes" : 13,?? ?"indexSize" : 801931264,?? ?"fileSize" : 6373244928,?? ?"ok" : 1}
获取服务器的状态
{?? ?"version" : "1.6.5",?? ?"uptime" : 7208469,?? ?"uptimeEstimate" : 7138829,?? ?"localTime" : "Wed Oct 26 2011 22:23:07 GMT+0800 (CST)",?? ?"globalLock" : {?? ??? ?"totalTime" : 7208469556704,?? ??? ?"lockTime" : 4959693717,?? ??? ?"ratio" : 0.000688036992871448,?? ??? ?"currentQueue" : {?? ??? ??? ?"total" : 0,?? ??? ??? ?"readers" : 0,?? ??? ??? ?"writers" : 0?? ??? ?}?? ?},?? ?"mem" : {?? ??? ?"bits" : 64,?? ??? ?"resident" : 3131,?? ??? ?"virtual" : 6172,?? ??? ?"supported" : true,?? ??? ?"mapped" : 4927?? ?},?? ?"connections" : {?? ??? ?"current" : 402,?? ??? ?"available" : 2599?? ?},?? ?"extra_info" : {?? ??? ?"note" : "fields vary by platform",?? ??? ?"heap_usage_bytes" : 832531920,?? ??? ?"page_faults" : 8757?? ?},?? ?"indexCounters" : {?? ??? ?"btree" : {?? ??? ??? ?"accesses" : 2821726,?? ??? ??? ?"hits" : 2821725,?? ??? ??? ?"misses" : 1,?? ??? ??? ?"resets" : 0,?? ??? ??? ?"missRatio" : 3.543930204420982e-7?? ??? ?}?? ?},?? ?"backgroundFlushing" : {?? ??? ?"flushes" : 120133,?? ??? ?"total_ms" : 73235923,?? ??? ?"average_ms" : 609.6236920746173,?? ??? ?"last_ms" : 1332,?? ??? ?"last_finished" : "Wed Oct 26 2011 22:22:23 GMT+0800 (CST)"?? ?},?? ?"cursors" : {?? ??? ?"totalOpen" : 0,?? ??? ?"clientCursors_size" : 0,?? ??? ?"timedOut" : 238392?? ?},?? ?"repl" : {?? ??? ?"ismaster" : true?? ?},?? ?"opcounters" : {?? ??? ?"insert" : 269351,?? ??? ?"query" : 19331151,?? ??? ?"update" : 14199331,?? ??? ?"delete" : 1,?? ??? ?"getmore" : 145575,?? ??? ?"command" : 55982302?? ?},?? ?"asserts" : {?? ??? ?"regular" : 0,?? ??? ?"warning" : 0,?? ??? ?"msg" : 0,?? ??? ?"user" : 27,?? ??? ?"rollovers" : 0?? ?},?? ?"ok" : 1}
需要关心的地方:
Mongodb 的命令一般很快就完成,但是在一台繁忙的机器或者有比较慢的命令时,你可以通过db.currentOp()获取当前正在执行的操作。
在没有负载的机器上,该命令基本上都是返回空的
>? db.currentOp(){ "inprog" : [ ] }
以下是一个有负载的机器上得到的返回值样例:
{ "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")
MongoDB Monitoring Service(MMS)是Mongodb厂商提供的监控服务,可以在网页和Android客户端上监控你的MongoDB状况。请参考