0

Ruby on Rails Web ページが要求されると、データベースのクエリに 2 倍から 4 倍の時間がかかることがあります。モペットのデバッグ ログを有効にすると、次のような行が表示されました。

D, [2013-11-21T23:11:10.889418 #7690] DEBUG -- :   MOPED: 127.0.0.1:17203 QUERY        database=db collection=col selector={"emailCount"=>{"$gt"=>9}} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (42.4671ms)
D, [2013-11-21T23:11:13.403011 #7690] DEBUG -- :   MOPED: 54.213.xxx.xx:17203 QUERY        database=db collection=col selector={"emailCount"=>{"$gt"=>9}} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (127.4977ms)

クエリとフラグを編集すると、タイミングの違いは次のとおりです。

D, [2013-11-21T22:28:16.268263 #7690] DEBUG -- :   MOPED: 54.213.xxx.xx:17203 QUERY [...redacted...] (163.0192ms)
D, [2013-11-21T22:28:17.872661 #7690] DEBUG -- :   MOPED: 54.213.xxx.xx:17203 QUERY [...redacted...] (89.7279ms)
D, [2013-11-21T22:30:26.645921 #7690] DEBUG -- :   MOPED: 127.0.0.1:17203 QUERY [...redacted...] (38.0206ms)
D, [2013-11-21T22:37:47.464478 #7690] DEBUG -- :   MOPED: 127.0.0.1:17203 QUERY [...redacted...] (42.1586ms)
D, [2013-11-21T22:39:53.393541 #7690] DEBUG -- :   MOPED: 54.213.xxx.xx:17203 QUERY [...redacted...] (154.6400ms)
D, [2013-11-21T22:41:16.217997 #7690] DEBUG -- :   MOPED: 127.0.0.1:17203 QUERY [...redacted...] (38.3251ms)
D, [2013-11-21T22:41:29.540417 #7690] DEBUG -- :   MOPED: 54.213.xxx.xx:17203 QUERY [...redacted...] (124.6662ms)
D, [2013-11-21T22:41:36.281601 #7690] DEBUG -- :   MOPED: 127.0.0.1:17203 QUERY [...redacted...] (37.7121ms)
D, [2013-11-21T23:11:07.696951 #7690] DEBUG -- :   MOPED: 127.0.0.1:17203 QUERY [...redacted...] (41.8334ms)
D, [2013-11-21T23:11:10.889418 #7690] DEBUG -- :   MOPED: 127.0.0.1:17203 QUERY [...redacted...] (42.4671ms)
D, [2013-11-21T23:11:13.403011 #7690] DEBUG -- :   MOPED: 54.213.xxx.xx:17203 QUERY [...redacted...] (127.4977ms)
D, [2013-11-21T23:11:16.796217 #7690] DEBUG -- :   MOPED: 54.213.xxx.xx:17203 QUERY [...redacted...] (166.5795ms)
D, [2013-11-21T23:11:22.210991 #7690] DEBUG -- :   MOPED: 54.213.xxx.xx:17203 QUERY [...redacted...] (195.2744ms)

モペットが IP 127.0.0.1 を使用する場合と 54.213.xxx.xx を使用する場合があるのはなぜですか? そして、なぜ 54.213.xxx.xx を照会すると、2 倍から 4 倍の時間がかかるのでしょうか? これらのログ エントリを生成するには、Web ページを更新するだけです。

理想的には、すべてのクエリが時折 160 ミリ秒かかるのではなく、40 ミリ秒かかるようにしたいと考えています。

mongoid.yml関連する場合は次のとおりです。

development:
  sessions:
    default:
  database: db
  hosts:
    - localhost:17203
    - xxx.no-ip.biz:27017
  options:
    consistency: :eventual
  username: user
  password: pass

レプリカ セットには 2 つのモンゴがあります。localhost:17203 (または 54.213.xxx.xx) にあるものは、セカンダリ メンバーです。xxx.no-ip-.biz は 174.21.xxx.xxx に解決されるため、プライマリ メンバーが読み取りに使用されていないことがわかります (予想どおり)。

4

1 に答える 1

0

Moped が mongoDB サーバーに接続すると、サーバーのホスト名が IP アドレスに解決されます。おそらく、Web アプリ サーバーはそれぞれの要求を異なるワーカー プロセスで処理しており、各プロセスはホスト名を異なる方法で解決しています。

私はネットワーキングの専門家ではありませんが、DNS 設定が何らかの形でめちゃくちゃになっている可能性があります。localhost が、予想される 127.0.0.1 ループバック アドレスではなく、ボックスの外部 IP アドレスに解決されることがあります。したがって、ローカル ネットワーク内で通信する代わりに、リクエストは ISP の DNS サーバーに送信され、そこで解決され、同じボックスに戻ってくる必要があります。

于 2013-11-22T21:30:41.787 に答える