MongoDB getmore 在集合上非常慢
MongoDB getmore on a collection is very slow
我正在尝试在 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 毫秒,但紧接着,getmore 条目用了 5 到 6 秒。
聚合查询有 cursor: { batchSize: 0 }
,初始批量大小为零。所以,查询returns很快。但是当应用程序开始遍历游标时,getmore 会被记录下来并且该条目没有任何查询详细信息。
修复聚合查询 $match 以使用索引解决问题
我正在尝试在 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 毫秒,但紧接着,getmore 条目用了 5 到 6 秒。
聚合查询有
cursor: { batchSize: 0 }
,初始批量大小为零。所以,查询returns很快。但是当应用程序开始遍历游标时,getmore 会被记录下来并且该条目没有任何查询详细信息。修复聚合查询 $match 以使用索引解决问题