我在使用 MongoDB 时遇到了一些奇怪的性能问题。首先,我尝试通过确实有效的mongojs驱动程序获取大约 1000 个文档,但在大约 60 多秒内完成了查询。请注意,文件无论如何都不大!
然后我尝试做同样的查询,但是对 mongo shell 运行了一个 explain() 来检查它是否真的只是查询太慢了。经检查,查询只用了 4ms 即可完成!我不知道是什么原因造成的。有任何想法吗?
更多细节:
- 小文件
- MongoDB 服务器位于我通过 VPN 连接的另一台服务器上
- 索引放置在必要的地方
编辑:
我运行了wireshark并注意到以下内容:
查询被发送到服务器
服务器在 1ms 内响应 101 个文档(总是相同的数量)
客户端执行“获取更多”请求
服务器响应其余文档大约需要一两分钟
带有文档的“获取更多”请求和服务器响应将继续,直到它发送完所有内容。即使是最小的大约 1000 个文档,这也可能需要……永远!
这是我在节点 CLI 中运行的一段代码:
/* Get all the documents (about 1000) */
var db = require('mongojs').connect("myIpAddress", ["myCollection"]);
db.myCollection.find({}).forEach(function(err, doc) {
console.log(doc);
});
编辑2:
我不确定它是否相关,但我时不时地从wireshark收到一个“TCP Out of Order”数据包。
编辑 3:
我试图调整批量大小,这不起作用。我还尝试了 MongoSkin以确保它不是mongojs做错了什么,但这也没有解决任何问题。