レプリカ セットの基本構成に成功しましたが、読み取りパフォーマンスが遅いことに気付きました。レプリカ セットに 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
}
};