node-mongodb 版本 2.0.43 和 MongoDB shell 版本:3.2.5
Centos虚拟机
我有一个(无上限)1600 个文档的集合(不是很大),并且所有文档都有标准的 BSON _ids
if I do
db.collection('docs').find({}).limit(100).toArray(function(e,r){console.log('done');});
我等待大约 1/2 秒的结果!
但是,如果我这样做
db.collection('docs').find({}).toArray(function(e,r){console.log('done');})
我在这里坐了 5-10 分钟就放弃了。
所以然后我将限制设置为200(期望结果只要限制100就需要x2,但它永远不会出现)
接下来我尝试限制 150,101,110,105,103,102 缩小范围
发现结果在101限制之后就停止了!
这似乎完全没有用处,对我来说这似乎是一个真正的问题。
If limit(200)
花了两倍的时间,然后我会说这是我的查询中的性能问题,但它只是挂起并且 101 个结果令人不满意!一个糟糕的假设:更不用说我立即担心,如果任何查询有超过 100 个项目需要查看,我的应用程序可能会在任何时候挂起)
每个文档看起来都是这样
{
"_id": "578eaa1ae642785679cd98b0",
"linkid": "12633170",
"advertisercid": "4612127",
"websitename": "Car Rental 8",
"destinationurl": "https://www.carrental8.com/en/",
"who": "8027061-12633170-1467924618000",
"href": "http://www.tkqlhce.com",
"src": "http://www.awltovhc.com",
"r1": 3,
"r2": 44,
"r3": 24,
"r4": 58
}
另一个假设:我不认为剖析 https://stackoverflow.com/questions/11861909/how-do-i-enable-profiling-in-node-mongodb-native可以处理未完成的查询吗?
另外令我感到非常奇怪的是,查询速度并没有真正下降太多,直到 101 然后什么都没有。
为什么查询会永远挂起而不是变得更慢?
mongodb.log 显示没有任何错误
Tried db.command({ profile : 1, slowms : 10 });
就在之前find
但似乎没有发生任何情况。
yum 更新 mongodb-org 尽管它确实更新了,但没有做任何改变:mongodb-org-server、mongodb-org-mongos、mongodb-org-shell 和 mongodb-org-tools!
将完全相同的集合复制到专用服务器上
它在那里工作,而不是在虚拟机上
拍摄了虚拟机内存在挂起之前(蓝色)和之后(红色)的屏幕截图,但我没有看到明显的变化
将这两行添加到 /etc/security/limits.conf
root soft nofile 10000
root hard nofile 10000
也尝试过https://serverfault.com/questions/591812/how-to-set-ulimits-for-mongod https://serverfault.com/questions/591812/how-to-set-ulimits-for-mongod
重新启动服务器并启动 mongod 但没有任何变化!