MongoDB getmore在集合中的速度非常慢

MongoDB getmore在集合中的速度非常慢,mongodb,mongodb-query,Mongodb,Mongodb Query,我正在尝试调试MongoDB实例上的高CPU问题。我们有两个shard r3.0大型AWS实例。与ops计数相比,页面错误不多 系统配置文件显示了大量getmore条目,如下所示。请帮助我找出导致getmore速度非常慢的原因 { "op" : "getmore", "ns" : "mydb.mycollection", "cursorid" : 74493486271, "ntoreturn" : 0, "

我正在尝试调试MongoDB实例上的高CPU问题。我们有两个shard r3.0大型AWS实例。与ops计数相比,页面错误不多

系统配置文件显示了大量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" : ""
    }

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

  • 当CPU处于高位时启用更多日志记录
    db.adminCommand({setParameter:1,logLevel:1})
    ,在did重置为logLevel:0(默认值)后
  • 然后日志显示了一个0毫秒的聚合查询,但紧接着,getmore条目显示了5到6秒
  • 聚合查询具有
    游标:{batchSize:0}
    ,初始批大小为零。因此,查询返回得很快。但当应用程序开始通过游标进行迭代时,getmore被记录下来,并且该条目没有任何查询详细信息

    修复聚合查询$match以使用索引解决了此问题


您的复制延迟情况如何?@MarkusWMahlberg-感谢您的回复。getmore与慢速聚合查询相关。回答我自己的问题如下。你能提供样本数据和聚合吗?@Samba,你是如何具体地强制查询使用索引的?@tomascharad,我们必须更改复合查询中元素的顺序。