Mongodb在 高并发的时候查询特别慢的问题

leonbingo 2017-05-12 11:51:04
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)
}
}
}
...全文
3219 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
方丈的寺院 2017-07-02
  • 打赏
  • 举报
回复
这个问题在mongo中貌似很常见。
rucypli 2017-05-16
  • 打赏
  • 举报
回复
版本多少 除了普通的查询 有没有大量加表删表操作 删除修改操作是否频繁 磁盘是否满负荷 如果不是最新版本 可以尝试升级一个小版本试试
leonbingo 2017-05-16
  • 打赏
  • 举报
回复
引用 1 楼 rucypli 的回复:
MMAP引擎?
不是的,是WiredTiger, 我有700多个collection,每个collection都有1-2w数据
rucypli 2017-05-15
  • 打赏
  • 举报
回复
MMAP引擎?

1,798

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧