在mongodb 2.6.3中是否还有一些全局锁定

时间:2014-12-23 15:14:51

标签: mongodb

我有一个包含3台服务器的副本集(QuadCore,64 GB RAM,SSD - HW-Raid)。

大多数查询通常都非常快,例如一个简单的查询{ShortKey:" ABC"}在一个包含176个文档的小集合中,每个文档都非常小。在大多数情况下,查询大约需要1毫秒,但有时执行时间非常长。

分析器显示它等待很长时间才能锁定。我不明白的是这个db的锁定百分比大约是2%。所以问题是:是否有任何全局锁定(例如复制)以及我可以做些什么来改进它?

{
    "op" : "query",
    "ns" : "bls_read.CompanySet",
    "query" : {
      "ShortKey" : "ABC"
    },
    "ntoskip" : 0,
    "nscanned" : 148,
    "nscannedObjects" : 148,
    "keyUpdates" : 0,
    "numYield" : 1,
    "lockStats" : {
      "timeLockedMicros" : {
        "r" : NumberLong(874),
        "w" : NumberLong(0)
      },
      "timeAcquiringMicros" : {
        "r" : NumberLong(4330712),
        "w" : NumberLong(14774)
      }
    },
    "nreturned" : 1,
    "responseLength" : 441,
    "millis" : 4298,
    "execStats" : {
      "type" : "LIMIT",
      "works" : 149,
      "yields" : 1,
      "unyields" : 1,
      "invalidates" : 0,
      "advanced" : 1,
      "needTime" : 148,
      "needFetch" : 0,
      "isEOF" : 1,
      "children" : [{
          "type" : "COLLSCAN",
          "works" : 149,
          "yields" : 1,
          "unyields" : 1,
          "invalidates" : 0,
          "advanced" : 1,
          "needTime" : 148,
          "needFetch" : 0,
          "isEOF" : 0,
          "docsTested" : 148,
          "children" : []
        }]
    }
}

1 个答案:

答案 0 :(得分:1)

在可能的情况下,您的查询可能会受到影响 - 这取决于系统要求 - 可以打到辅助设备。

考虑将您的查询read preference更改为默认Secondary的{​​{1}}或secondaryPreferred

  

默认情况下,应用程序将其读取操作定向到副本集中的主要成员。阅读主要保证   读取操作反映了文档的最新版本。   但是,通过将部分或全部读取分发给辅助成员   副本集,您可以提高读取吞吐量或减少延迟   不需要完全最新数据的应用程序。