【发布时间】:2012-08-18 18:06:43
【问题描述】:
我在使用 MongoDB 时遇到了一些奇怪的性能问题。首先,我尝试通过 mongojs 驱动程序获取大约 1000 个文档,该驱动程序确实有效,但在大约 60 多秒内完成了查询。请注意,文件并不大!
然后我尝试执行相同的查询,但对 mongo shell 运行了一个 explain() 来检查它是否真的只是查询太慢了。经检查,查询只用了 4ms 即可完成!我不知道是什么原因造成的。有什么想法吗?
更多细节:
- 小文件
- MongoDB 服务器位于我通过 VPN 连接到的另一台服务器上
- 在必要的地方放置索引
编辑:
我运行了wireshark并注意到以下内容:
-
查询被发送到服务器
-
服务器在 1 毫秒内响应 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乱序”数据包。
编辑 3:
我尝试调整批量大小,但没有成功。我还尝试了MongoSkin 以确保它不是mongojs 做错了什么,但这也没有解决任何问题。
【问题讨论】: