Mongodb在 高并发的时候查询特别慢的问题
mongodb在访问量大的时候遇到了性能问题。
同样一个查询,在访问量少的时候,100ms就能解决,但是访问量大的时候几十秒都无法查询出来。
当访问量大的时候, db.currentOp(), 会发现数据库里面有非常多的查询等待执行。请看下面的打印日志,发现timeAcquiringMicros的时间特别长,是在等待什么锁吗,动则十秒上百秒的,也不知道是为什么。
我数据库的设计都是按照key value的形式来的,只有一个索引,也只会按照这个索引来查询,没有任何复杂查询,数据库里面也只有添加,删除和查询三种操作。 请各位大神看看,到底是什么引起的这个问题。 数据库里面的记录在百万-千万之间,访问量大的时候每天最多20w pv左右,有可能单位时间的访问量会比较大, cpu和内存也都没有满载
{
"desc" : "conn7006",
"threadId" : "14028",
"connectionId" : 7006,
"client" : "127.0.0.1:58982",
"active" : true,
"opid" : 15131018,
"secs_running" : 0,
"microsecs_running" : NumberLong(77711),
"op" : "query",
"ns" : "SuperMirror_Limited.SuperMirrorSettingCollection
",
"query" : {
"find" : "SuperMirrorSettingCollection",
"filter" : {
"Key" : "SpidersCacheKey"
}
},
"planSummary" : "IXSCAN { Key: 1 }",
"numYields" : 1,
"locks" : {
"Global" : "r",
"Database" : "r"
},
"waitingForLock" : true,
"lockStats" : {
"Global" : {
"acquireCount" : {
"r" : NumberLong(4)
}
},
"Database" : {
"acquireCount" : {
"r" : NumberLong(2)
},
"acquireWaitCount" : {
"r" : NumberLong(2)
},
"timeAcquiringMicros" : {
"r" : NumberLong(300543)
}
},
"Collection" : {
"acquireCount" : {
"r" : NumberLong(1)
}
}
}