我有 2 个 EC2 实例,一个作为 mongodb 服务器,另一个是 python Web 应用程序(相同的可用区)。python 服务器使用 PyMongo 连接到 mongo 服务器,一切正常。
问题是,当我在 python 中分析执行时间时,在某些调用(少于 5%)中,它甚至需要几秒钟才能返回。我能够缩小问题范围,并且时间延迟实际上是在对 mongo 服务器的 db 调用上。
我认为的两个原因是,1. Mongo 服务器速度慢/过载 2. 网络延迟
所以,我尝试将 mongo 服务器升级到快 4 倍的实例,但问题仍然存在(有些调用甚至需要 3 秒才能返回)我认为由于两台服务器都在 EC2 上,网络延迟应该不是问题......但可能是我错了。
我如何确认问题是否实际上是网络本身?如果是这样,解决它的最佳方法是什么?还有其他可能的原因吗?
任何帮助表示赞赏...
谢谢,
UPATE:我获取的实体非常小(索引),通常调用只需 0.01-0.02 秒即可完成。
更新:
正如“James Wahlin”所建议的,我在我的 mongo 服务器上启用了分析并得到了一些有趣的日志,
Fri Mar 15 18:05:22 [conn88635] query db.UserInfoShared query: { $or: [ { _locked: { $exists: false } }, { _locked: { $lte: 1363370603.297361 } } ], _id: "750837091142" } nto return:1 nscanned:1 nreturned:1 reslen:47 2614ms
Fri Mar 15 18:05:22 [conn88635] command db.$cmd command: { findAndModify: "UserInfoShared", fields: { _id: 1 }, upsert: true, query: { $or: [ { _locked: { $exists :假}},{_locked:{$ lte:1363370603.297361}}],_id:“750837091142”},更新:{$set:{_locked:1363370623.297361}},新:真}ntoreturn:1 reslen:153 2614ms
您可以看到这两个调用用了 2 秒多的时间才完成。该字段_id
是唯一索引的,查找它不应该花费这么多时间。可能我必须为此发布一个新问题,但是 mongodb GLOBAL LOCK 可以是原因吗?