首先请注意:
由于数据库分析器可能会对性能产生负面影响,因此仅在战略间隔中并尽可能少地在生产系统上启用分析。
您还可以按数据库启用分析器,以减少对mongo实例的分析影响。 在您的情况下,slowms = 1
是多余的,profile = 2
将记录所有查询,无论它们需要多长时间。
这里有一个简单的测试,可检查查看分析数据是否需要额外配置:
db.setProfilingLevel(2)
db.testProf.insert({x : 1})
db.testProf.update({x : 1}, {$set : {x : 2}})
db.testProf.find({x : 2})
db.testProf.remove({x : 2})
db.setProfilingLevel(0)
现在您可以查询个人资料数据以获取详细信息:
db.system.profile.find().pretty()
这应该显示每个操作的运行时信息。以下是更新操作详细信息的摘录:
"op" : "update",
"ns" : "profDb.testProf",
"query" : {
"x" : 1
},
"updateobj" : {
"$set" : {
"x" : 2
}
},
"nscanned" : 1,
"nupdated" : 1,
"fastmod" : true,
"keyUpdates" : 0,
"numYield" : 0,
"lockStats" : {
"timeLockedMicros" : {
"r" : NumberLong(0),
"w" : NumberLong(1131)
},
"timeAcquiringMicros" : {
"r" : NumberLong(0),
"w" : NumberLong(5)
}
}
query
字段包含更新条件,而updateobj
字段包含对文档执行的更新操作。如果您执行相同的操作,但是query
字段仍为空,那么可能是因为您对所有文档运行了更新、删除等操作。
有关如何解释配置数据的更多信息,请参阅文档-数据库分析器输出
编辑:
刚刚注意到配置中的diaglog=3
。这个配置主要用于记录和重放操作。它会保留非常详细的日志,并且也会对性能产生负面影响。我认为您应该跳过它。分析已足以实现您想要的结果。
编辑:
不确定您为什么需要将配置数据保存到文件中,因为我认为将其保存到集合中会更方便。您可以像查询任何其他集合一样查询您感兴趣的数据。我不知道是否有将配置数据直接流式传输到文件的方法,但是您可以随时将其导出,例如:
mongoexport --db profDb --collection system.profile --out profiler.json
你说得对,diaglog会将所有数据写入文件,但它使用的是内部格式,不太友好且难以阅读。
diaglog是用于内部使用,不适用于大多数用户。
希望这有所帮助!