什么是mongodb日志中的“锁(微)w:16035”和“锁(微)r:10051”

时间:2013-12-02 21:59:50

标签: mongodb

我在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是一些特定于数据库的锁定时间。但是哪一个? 是时候花在锁上还是等待获取锁的时间?

1 个答案:

答案 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。您可以查看那里的代码,看看它如何解析不同的日志行。