MongoDBで奇妙なパフォーマンスの問題が発生しています。最初に、動作したmongojsドライバーを介して約1000のドキュメントを取得しようとしましたが、クエリは約60秒以上で完了しました。ドキュメントは決して大きくないことに注意してください!
次に、同じクエリを実行しようとしましたが、mongoシェルに対してexplain()を実行して、クエリが非常に遅いだけであるかどうかを確認しました。調べてみると、クエリが完了するのに4ミリ秒しかかからなかったことがわかりました。何が原因なのかわかりません。何か案は?
詳細:
- 小さな文書
- MongoDBサーバーは、VPN経由で接続している別のサーバーにあります
- インデックスは必要に応じて配置されます
編集:
私はwiresharkを実行し、次のことに気づきました。
クエリはサーバーに送信されます
サーバーは1ms未満で101のドキュメントで応答します(常に同じ数)
クライアントは「GetMore」リクエストを実行します
サーバーが残りのドキュメントで応答するまでに約1〜2分かかります
「GetMore」リクエストとドキュメントを含むサーバーの応答は、すべてが送信されるまで続きます。これには時間がかかるかもしれません...約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から「TCPOutofOrder」パケットを受け取ることがあります。
編集3:
バッチサイズを調整しようとしましたが、機能しませんでした。また、MongoSkinを試して、 mongojsが何か間違ったことをしていないことを確認しましたが、それでも何も解決しませんでした。