原文

  http://itopm.com/archives/2012/07/21/mongodb-profile.shtml

Mongodb Profiling 是Mongodb提供的类似Mysql的 慢查询的功能,可以记录执行时间超过多少的语句,Mongodb Profiling记录是记录在syste的profile里面。可以通过db.system.profile.find()来进行查询。

Mongodb Profiling帮助

>db.commandHelp("profile") //see how to run from dirvers

profile 命令只针对某个数据库,不是全局的,mysql开启慢查询之后是针对所有数据库的。比如要对itopm数据库启用profile,需要use itopm

启用Mongodb的profile

方法1:

To enable profiling, from the mongo shell invoke:

> db.setProfilingLevel(2);
{"was" : 0 , "slowms" : 100, "ok" : 1} // "was" is the old setting
> db.getProfilingLevel()
2
Profiling levels are:

0 - off
1 - write slow operations (by default, >100ms is considered slow) to the system.profile collection
2 - write all operations to the system.profile collection

In addition to the default levels you can also specify a slowms option:

> db.setProfilingLevel(1,20) // log slow operations, slow threshold=20ms

查看目前的profiling的状态

> db.getProfilingStatus() // new shell helper method as of v1.7+
{ "was" : 1, "slowms" : 20 }

Note: the profiling level controls which operations get written to the system.profile collection. However, even if the profiler is off, queries slower than the "slowms" level will get written to the logs.

启动Mongodb profile 方法2:

在启动mongodb的时候加入相关参数

Through the command-line/config-file

You can also enable profiling on the command line; for example:

$ mongod --profile=1 --slowms=15

还有需要注意的是,如果你的mongodb采用了sharding,需要在每个sharding上面开启profile

查询profile的数据

db.system.profile.find()

当然啦,你可以通过加入条件来过滤相关数据来为你所用了,比如

查询运行时间大于500毫秒的语句

db.system.profile.find( { millis : { $gt : 500 } } )


查询最近的语句

db.system.profile.find().sort({$natural:-1})


查询一段时间内的语句

> db.system.profile.find(
...{ts:{$gt:new ISODate("2012-07-19T03:00:00Z"),
...     $lt:new ISODate("2012-07-19T03:40:00Z")}
...})

也可以用show profile 来查看相关的信息

PRIMARY> show profile

command itopm.$cmd 155ms Fri Jul 20 2012 13:58:15
command:{
        "count" : "itodoc",
        "query" : {
                "pt" : {
                        "$gte" : NumberLong(1342713600)
                },
                "tag" : {
                        "$in" : [
                                "r887"
                        ]
                }
        }
} ntoreturn:1 responseLength:48 client:192.168.100.4 user:


command itopm.$cmd 195ms Fri Jul 20 2012 13:58:15
command:{
        "count" : "itodoc",
        "query" : {
                "pt" : {
                        "$gte" : NumberLong(1342713600)
                },
                "tag" : {
                        "$in" : [
                                "r51"
                        ]
                }
        }
} ntoreturn:1 responseLength:48 client:192.168.100.4 user:


command itopm.$cmd 465ms Fri Jul 20 2012 13:58:14
command:{
        "count" : "itodoc",
        "query" : {
                "pt" : {
                        "$gte" : NumberLong(1342713600)
                },
                "tag" : {
                        "$in" : [
                                "r884"
                        ]
                }
        }
} ntoreturn:1 responseLength:48 client:192.168.100.4 user:


command itopm.$cmd 490ms Fri Jul 20 2012 13:58:14
command:{
        "count" : "itodoc",
        "query" : {
                "pt" : {
                        "$gte" : NumberLong(1342713600)
                },
                "tag" : {
                        "$in" : [
                                "r884"
                        ]
                }
        }
} ntoreturn:1 responseLength:48 client:192.168.100.4 user:


command itopm.$cmd 288ms Fri Jul 20 2012 13:58:14
command:{
        "count" : "itodoc",
        "query" : {
                "pt" : {
                        "$gte" : NumberLong(1342713600)
                },
                "tag" : {
                        "$in" : [
                                "r876"
                        ]
                }
        }
} ntoreturn:1 responseLength:48 client:192.168.100.4 user: