6

レプリカ セットの基本構成に成功しましたが、読み取りパフォーマンスが遅いことに気付きました。レプリカ セットに 2 つの mongo サーバーと 1 つのアービターがあります。すべてがCentos 6.3の最小セットアップ(データベースのみ)で実行されています。

別の Windows サーバー 2012 にも単一の mongo インスタンスがあります。

レプリカ セットを構築する前は、Web サーバーは Mongo (その Windows インスタンス) と同じ OS 上にありました。パフォーマンスは良好で、結果は次のようでした

C# .NET 4.5 (同じ VM 上の IIS と Mongo) 読み取り 2000 行: ~250ms at AvgObj 2600 バイト

現在、レプリカ セットを使用すると、読み取りパフォーマンスが非常に遅くなります。私のWebサーバーがレプリカセットにアクセスすると、次のような結果が得られます

C# .NET 4.5 (分離、Centos レプリカ上の IIS と Mongo) 読み取り 2000 行: AvgObj 2600 バイトで ~2500 ミリ秒

リモート IIS から単一の Mongo インスタントから読み取ろうとしたところ、結果は次のようになりました

C# .NET 4.5 (分離された、Windows 上の IIS および単一の Mongo) 2000 行の読み取り: AvgObj 2600 バイトで ~600ms

すべてのサーバーは、Hyper-V コア サーバーを備えた単一の物理マシンで実行されています。

最新の C# MongoDB Driver 1.7 バージョンを使用しています。コマンド シェルでテストしたところ、すべての mongo サーバーでクエリが 10 ミリ秒で実行されました。

別の Centos サーバーにあるレプリカ セットの読み取りパフォーマンスが遅い理由を教えてください。それはネットワークですか、ドライバーですか、それとも他に何ですか?

私のC#設定は

            var server1 = new MongoServerAddress("1.0.0.1"); //primary
            var server2 = new MongoServerAddress("1.0.0.2"); /secundary
            var servers = new List<MongoServerAddress> {server1, server2};

            var safe = new MongoClientSettings
                {

                    Servers = servers,
                    ReplicaSetName = "rs0",
                    ConnectionMode = ConnectionMode.ReplicaSet,
                    WriteConcern = new WriteConcern
                        {
                            Journal = false,
                            W = 1
                        },
                    ReadPreference = new ReadPreference
                        {
                            ReadPreferenceMode = ReadPreferenceMode.PrimaryPreferred
                        }
                };
4

3 に答える 3

1

Mongo シェルでは、通常、最初の 10 レコードが返されます。.NET では、最初の 101 レコードまたは 1 MB (いずれか早い方) が返されます。カーソルを開いて反復のタイミングを計っている場合、シェルからの 10 レコードの取得に比べて非常に遅くなることがわかります。

シェル内のすべてのレコードを取得するために JS ループを実行してみて、所要時間を確認してください。シェルと C# 接続の両方を mongos 接続を介して実行する必要があることに注意してください。

于 2012-12-21T20:08:18.920 に答える
1

これは決定的な答えではないかもしれませんが、この時点で行うことは、間に c# アプリケーションを介さずに mongo 接続をデバッグすることです。同じデータを持つレプリカ)。
ここに大きな違いがある場合は、VM/OS の構成 (ネットワーク アダプター、ネットワーク構成など) を調べます。

違いがない場合は、mongo の設定 (読み取り設定、スレーブなど) をいじって、正確にパフォーマンスを妨げているものを見つけます。

于 2013-01-04T19:18:34.037 に答える