2015-06-20 48 views
3

我想在MongoDB实例上调试一个高CPU问题。我们有两个分片r3.large AWS实例。与操作次数相比,页面错误并不多。MongoDB getmore上一个集合很慢

系统配置文件显示了像下面这样的getmore条目。请帮助我找出导致getmore很慢的原因。

{ 
     "op" : "getmore", 
     "ns" : "mydb.mycollection", 
     "cursorid" : 74493486271, 
     "ntoreturn" : 0, 
     "keyUpdates" : 0, 
     "numYield" : 7, 
     "lockStats" : { 
      "timeLockedMicros" : { 
       "r" : NumberLong(16140), 
       "w" : NumberLong(0) 
      }, 
      "timeAcquiringMicros" : { 
       "r" : NumberLong(6458801), 
       "w" : NumberLong(294321) 
      } 
     }, 
     "nreturned" : 120, 
     "responseLength" : 13100, 
     "millis" : 6304, 
     "execStats" : { 

     }, 
     "ts" : ISODate("2015-06-16T14:20:39.886Z"), 
     "client" : "1.5.1.3", 
     "allUsers" : [ ], 
     "user" : "" 
    } 
+0

请问你复制延迟样子? –

+0

@MarkusWMahlberg - 感谢您的回复。 getmore与聚合查询缓慢有关。回答我自己的问题如下。 – Samba

回答

3

回答我自己的问题,它可能会帮助其他人。

  • 在CPU高电平时启用更多日志记录db.adminCommand({ setParameter: 1, logLevel: 1 }),重置为logLevel后:0(默认值)。
  • 然后日志显示一个0ms的聚合查询,但在此之后,获取更多的输入5到6秒。
  • 聚合查询有cursor: { batchSize: 0 },初始批量大小为零。所以,查询很快返回。但是,当应用程序开始迭代游标时,getmore被记录下来,并且该条目没有任何查询细节。

    修复汇总查询$匹配使用解决的问题指标

+0

你能提供样本数据和聚合吗? –

+0

@Samba,你是如何强制查询使用索引的? – tomascharad

+0

@tomascharad,我们不得不改变组合查询中元素的顺序。 – Samba