2つのEC2インスタンスがあります。1つはmongodbサーバーとして、もう1つはpython Webアプリ(同じアベイラビリティーゾーン)です。PythonサーバーはPyMongoを使用してmongoサーバーに接続し、すべてが正常に機能します。
問題は、Pythonで実行時間をプロファイリングすると、一部の呼び出し(5%未満)で戻るのに最大で数秒かかることです。問題を絞り込むことができ、時間遅延は実際にはmongoサーバーへのdb呼び出しにありました。
私が考えた2つの原因は、1。Mongoサーバーが遅い/過負荷である2.ネットワーク遅延
そこで、mongoサーバーを4倍高速のインスタンスにアップグレードしようとしましたが、問題は引き続き発生します(一部の呼び出しは、戻るのに3秒もかかります)両方のサーバーがEC2上にあるため、ネットワーク遅延は問題にならないはずです...しかし、私は間違っていた。
問題が実際にネットワーク自体にあるかどうかを確認するにはどうすればよいですか?もしそうなら、それを解決するための最良の方法は何ですか?他に考えられる原因はありますか?
どんな助けでもありがたいです...
ありがとう、
UPATE:フェッチしているエンティティは非常に小さく(インデックスが付けられています)、通常、呼び出しは0.01〜0.02秒で終了します。
アップデート:
「JamesWahlin」が示唆しているように、mongoサーバーでプロファイリングを有効にして、いくつかの興味深いログを取得しました。
金3月15日18:05:22[conn88635]クエリdb.UserInfoSharedクエリ:{$ or:[{_locked:{$ examples:false}}、{_locked:{$ lte:1363370603.297361}}]、_id: "750837091142" } nto return:1 nscanned:1 nreturned:1 reslen:47 2614ms
15年3月金曜日18:05:22[conn88635]コマンドdb。$cmdコマンド:{findAndModify: "UserInfoShared"、フィールド:{_id:1}、upsert:true、クエリ:{$ or:[{_locked:{$ examples :false}}、{_locked:{$ lte:1363370603.297361}}]、_ id: "750837091142"}、更新:{$ set:{_locked:1363370623.297361}}、new:true} ntoreturn:1 reslen:153 2614ms
これらの2つの呼び出しが完了するまでに2秒以上かかったことがわかります。このフィールド_id
は一意のインデックスが付けられており、それを見つけるのにそれほど時間はかからなかったはずです。新しい質問を投稿する必要があるかもしれませんが、mongodb GLOBAL LOCKが原因である可能性がありますか?