我们的mongo设置:
1)mongodb 3.2.22版 2)WiredTiger存储引擎 3)1个主要,1个辅助,1个仲裁者副本集 4)数据集大小为〜160GB(+ gridFS) 5)系统:Ubuntu 16.04.6 LTS,vcpus:8,RAM:56、25600 MAX IOPS
我们的数据库统计信息:
{
"db" : "name",
"collections" : 592918,
"objects" : 2566552,
"avgObjSize" : 57148.94103684632,
"dataSize" : 146675728916,
"storageSize" : 167547809792,
"numExtents" : 0,
"indexes" : 671752,
"indexSize" : 13323071488,
"ok" : 1
}
这是db.serverStatus()https://gist.github.com/d3sire/91ebe81cb7eb8d19db3c9f472e9dff6e
的要点。问题:
突然,我们的请求开始花费很长时间(最多一分钟!)。经过进一步的研究,我确定了用例“触发”这些缓慢的请求。基本上,无论何时创建新集合(使用常规插入,甚至使用createCollection),所有其他查询都将堆积在队列中,而且速度确实很慢。
为我们复制的步骤如下:
1)运行db.coll_new_name.insert({“ test”:“ test”})
2)在另一个shell中运行db.serverStatus()。globalLock,它将显示
"currentQueue" : {
"total" :27,
"readers" : 26,
"writers" : 1
},
根据mongo文档判断,WiredTiger中的集合数量不受限制。
我们非常感谢您的帮助。