集合上的 MongoDB getmore 非常慢

标签 mongodb mongodb-query

我正在尝试调试 MongoDB 实例上的高 CPU 问题。我们有两个分片 r3.large AWS 实例。与操作数相比,页面错误并不多。

系统配置文件显示大量 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 } ) ,重置为 logLevel: 0(默认)。
  • 然后日志显示一个 0 毫秒的聚合查询,但紧接着,5 到 6 秒后获取更多条目。
  • 聚合查询有 cursor: { batchSize: 0 },初始批量大小为零。因此,查询很快返回。但是当应用程序开始遍历游标时,getmore 会被记录下来并且该条目没有任何查询详细信息。

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

关于集合上的 MongoDB getmore 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30949844/

相关文章:

mongodb - Mgo 聚合管道 $not 运算符。未知的顶级运算符(operator)

mongodb - 随时间分桶分析的范围支持

mongodb - 如何获得聚合 - $addFields 上的 $group 计数结果?

带有自身数据的 MongoDB 条件查询

mongodb - 蒙戈克司机 : how to query based on ISOdate?

javascript - $lookup 搜索 Mongodb

node.js - 如何使用 Mongoose 在 mongoDB 中填充 3 个集合

javascript - 将文档中的嵌套对象与可能匹配的数组进行匹配

javascript - NodeJS客户端中MongoDB中的BulkWriteError

mongodb - mongodb不存在时如何创建db?