我在MongoDb配置文件中启用了分析。
profile=2
slowms=5
mongodb日志包含花费超过5毫秒的所有查询(很奇怪,我认为profile = 2意味着记录所有查询)。
对于所有update
条目,该行以locks(micros) w:17738 17ms
结尾(实际数字不同)。对于所有query
条目,该行包含locks(micros) r:15208
示例行
Tue Dec 03 02:29:43.084 [conn11] update DbName.CollectionName query: { _id: ObjectId('51dfd2791bbdbe0b44395553')} update: { json for new document } nscanned:1 nmoved:1 nupdated:1 keyUpdates:0 locks(micros) w:17738 17ms
阅读docs,我找到了以下部分,
system.profile.lockStats
New in version 2.2. The time in microseconds the operation spent acquiring and holding locks. This field reports data for the following lock types: R - global read lock W - global write lock r - database-specific read lock w - database-specific write lock
好的,r
& w
是一些特定于数据库的锁定时间。但是哪一个? 是时候花在锁上还是等待获取锁的时间?
答案 0 :(得分:6)
轮廓= 2 slowms = 5
mongodb日志包含花费超过5毫秒的所有查询(很奇怪,我认为profile = 2意味着记录所有查询)。
将配置文件设置为级别2意味着所有查询都包含在system.profile
上限集合中,而与 slowms 值无关。这不会影响mongod
日志中包含哪些查询。
将 slowms 设置为5ms可定义将记录的慢速查询的阈值(无论是否进行性能分析),如果配置文件为级别,则包含在system.profile
集合中1(即配置文件慢查询)。
如果您还希望在日志中查看查询,可以将loglevel增加到1或更高:
db.adminCommand( { setParameter: 1, logLevel: 1 } )
警告:增加的日志级别会非常噪音,并且日志不会像system.profile
集合一样上限!
好的,所以r& w是一些特定于数据库的锁定时间。但是哪一个?花在锁上的时间还是等待获得锁的时间?
对于system.profile.lockStats
,有单独的字段用于获取(timeAcquiringMicros
)和持有(timeLockedMicros
)锁定。
日志中的“锁定(微软)”详细信息仅显示timeLockedMicros详细信息(源参考:db/lockstat.cpp。
我希望有一个链接可以提到日志文件的各个字段是什么
我不知道日志文件格式的任何详细文档,主要的MongoDB版本之间肯定存在一些差异。用于处理MongoDB日志文件的一个很棒的开源工具包是mtools
。您可以查看那里的代码,看看它如何解析不同的日志行。