我已经尝试过:
- 设置profiling级别 - 调整slow ms参数 - 使用mongod -vv选项
但是/var/log/mongodb/mongodb.log仅显示当前活动连接数...
您可以记录所有查询:
$ mongo
MongoDB shell version: 2.4.9
connecting to: test
> use myDb
switched to db myDb
> db.getProfilingLevel()
0
> db.setProfilingLevel(2)
{ "was" : 0, "slowms" : 1, "ok" : 1 }
> db.getProfilingLevel()
2
> db.system.profile.find().pretty()
来源:http://docs.mongodb.org/manual/reference/method/db.setProfilingLevel/
db.setProfilingLevel(2)
的意思是“记录所有操作”。
db.setProfilingLevel(2,-1)
。 - andresigualadasystem.profile
集合中。 - totymedlidb.system.profile.find().pretty()
对我没有任何输出。 - node_sainimongod --profile=1 --slowms=1 &
/var/log/mongodb/mongodb.log
tail -f /var/log/mongodb/mongodb.log
Mon Mar 4 15:02:55 [conn1] query dendro.quads query: { graph: "u:http://example.org/people" } ntoreturn:0 ntoskip:0 nscanned:6 keyUpdates:0 locks(micros) r:73163 nreturned:6 reslen:9884 88ms
/etc/mongodb.conf
中添加profile=1
和slowms=1
行? - Andrew Magee/etc/mongodb.conf
中添加--profile=2
,这样所有操作都将被记录。 - toskedb.setProfilingLevel(level,slowms)
。例如:db.setProfilingLevel(2,1)
将把级别设置为2,慢查询阈值设置为1毫秒。 - Abhishek Gupta由于谷歌的第一个答案...
适用于版本3
$ mongo
MongoDB shell version: 3.0.2
connecting to: test
> use myDb
switched to db
> db.setLogLevel(1)
http://docs.mongodb.org/manual/reference/method/db.setLogLevel/
MongoDB
具有精细的性能分析功能。日志记录在 system.profile
集合中。可以从下面查看日志:
db.system.profile.find()
日志有3个级别(来源):
要查看数据库正在运行的分析级别,请使用
db.getProfilingLevel()
查看状态
db.getProfilingStatus()
要更改分析配置文件的状态,请使用以下命令
db.setProfilingLevel(level, milliseconds)
level
指的是分析级别,milliseconds
是需要记录查询持续时间的毫秒数。要关闭日志记录,请使用
db.setProfilingLevel(0)
查询系统配置文件集合中所有超过一秒钟的查询,按时间戳降序排列的查询将是
db.system.profile.find( { millis : { $gt:1000 } } ).sort( { ts : -1 } )
我做了一个命令行工具来激活分析器活动并以可“tail”方式查看日志 --> "mongotail":
$ mongotail MYDATABASE
2020-02-24 19:17:01.194 QUERY [Company] : {"_id": ObjectId("548b164144ae122dc430376b")}. 1 returned.
2020-02-24 19:17:01.195 QUERY [User] : {"_id": ObjectId("549048806b5d3db78cf6f654")}. 1 returned.
2020-02-24 19:17:01.196 UPDATE [Activation] : {"_id": "AB524"}, {"_id": "AB524", "code": "f2cbad0c"}. 1 updated.
2020-02-24 19:17:10.729 COUNT [User] : {"active": {"$exists": true}, "firstName": {"$regex": "mac"}}
...
但更有趣的特性(与tail
类似)是使用-f
选项实时查看更改,并偶尔使用grep
过滤结果以查找特定操作。
文档和安装说明请参阅:https://github.com/mrsarm/mongotail
(也可从 Docker 运行,特别是如果您想要在 Windows 上执行它,请访问:https://hub.docker.com/r/mrsarm/mongotail)
如果您希望将查询日志记录到MongoDB日志文件中,您必须同时设置日志级别和分析级别,例如:
db.setLogLevel(1)
db.setProfilingLevel(2)
(参见 https://docs.mongodb.com/manual/reference/method/db.setLogLevel)
仅设置分析不会将查询记录到文件中,因此您只能从
db.system.profile.find().pretty()
一旦使用db.setProfilingLevel(2)
设置了分析级别。
以下命令将打印最后执行的查询。
您也可以更改限制(5)以查看更少/更多的查询。
$nin - 将筛选出配置文件和索引查询。
此外,使用查询投影{'query':1}仅查看查询字段。
db.system.profile.find(
{
ns: {
$nin : ['meteor.system.profile','meteor.system.indexes']
}
}
).limit(5).sort( { ts : -1 } ).pretty()
只有查询投影的日志
db.system.profile.find(
{
ns: {
$nin : ['meteor.system.profile','meteor.system.indexes']
}
},
{'query':1}
).limit(5).sort( { ts : -1 } ).pretty()
性能分析器数据被写入到您的数据库中的一个集合,而不是文件中。请参见http://docs.mongodb.org/manual/tutorial/manage-the-database-profiler/
我建议使用10gen的MMS服务,并将开发性能分析器数据馈送到那里,在那里您可以在UI中过滤和排序它。
将profilinglevel设置为2是记录所有查询的另一个选项。
mongod -vv
对我有用。 - fguillen