node-mongodb版本2.0.43& MongoDB shell版本:3.2.5
centos vm
我有一个(无上限)1600个文件(不是很大)的集合,所有这些文件都有标准的BSON _ids
如果我这样做
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(期望结果为x2,只要限制为100,但它永远不会出现)
接下来我把它缩小到试图限制150,101,110,105,103,102
并发现结果在101限制后停止!
这似乎完全没有用处,就像我有一个真正的问题。
如果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
}
另一个假设:我认为profiling不适用于未完成的查询?
同样让我感到非常奇怪的是,查询速度并没有真正下降到101,然后没有BOOM ......
为什么查询会永远挂起而不只是变慢?
mongodb.log显示没有错误
在db.command({ profile : 1, slowms : 10 });
之前尝试find
,但似乎没有发生任何个人资料。
yum update mongodb-org 虽然更新了但没有改变: mongodb-org-server,mongodb-org-mongos,mongodb-org-shell和mongodb-组织工具!
将完全相同的集合复制到专用服务器上
它不适用于vm
在之前(蓝色)和悬挂(红色)后拍摄了vm内存的屏幕截图,但我没有看到相当大的变化
将这两行添加到/etc/security/limits.conf
root soft nofile 10000
root hard nofile 10000
还尝试了https://serverfault.com/questions/591812/how-to-set-ulimits-for-mongod
重新启动服务器并启动mongod但没有改变!
答案 0 :(得分:1)
由Mongodb员工(Christian Amor Kvalheim)成员建议升级
npm install mongodb@2.2.4