创建集合时的数据库锁争用

时间:2019-05-16 21:47:40

标签: mongodb

我们的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中的集合数量不受限制。

我们非常感谢您的帮助。

0 个答案:

没有答案
相关问题