6

我成功地基本配置了我的副本集,但我注意到读取性能很慢。我的副本集中有 2 个 mongo 服务器和 1 个仲裁器。所有都在 Centos 6.3 最小设置(只是数据库)上运行。

我在另一个 Windows 服务器 2012 上也有单个 mongo 实例。

在我构建我的副本集之前,我的 Web 服务器与 Mongo(那个 Windows 实例)在同一个操作系统上。性能很好,结果就像

C# .NET 4.5(同一 VM 上的 IIS 和 Mongo)读取 2000 行:AvgObj 2600 字节时约 250 毫秒

现在使用我的副本集,我的读取性能非常慢。当我的网络服务器访问副本集时,我得到的结果如下

C# .NET 4.5(分离,Centos 副本上的 IIS 和 Mongo)读取 2000 行:AvgObj 2600 字节时约 2500 毫秒

我试图从远程 IIS 中读取我的单个 Mongo 瞬间,结果就像

C# .NET 4.5(Windows 上的分离、IIS 和单个 Mongo)读取 2000 行:AvgObj 2600 字节时约 600 毫秒

所有服务器都在具有 Hyper-V 核心服务器的单个物理机中运行。

我使用最新的 C# MongoDB 驱动程序 1.7 版本。从我在命令 shell 中测试的结果来看,在所有 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

3

为了在 Hyper V 上获得最佳性能,请确保您使用的是常规网络适配器(非旧版),并且您在来宾操作系统中安装了集成服务。

对于 CentOS 6.x,您可以从此处安装集成服务:http: //www.microsoft.com/en-us/download/details.aspx?id=34603

如果您发现您的 VM 使用的是旧版网络适配器,请注意,当您添加新适配器时,您必须重新配置来宾 (CentOS) 操作系统内部的网络。

于 2013-01-03T16:33:33.387 回答
1

在 Mongo shell 中,您通常会取回前 10 条记录 - 在 .NET 中,您将取回前 101 条记录或 1 MB(以先到者为准)。如果您打开一个游标然后对迭代进行计时,您会发现与从 shell 中检索 10 条记录相比,这可能非常慢。

尝试运行一个 JS 循环来检索 shell 中的所有记录,看看需要多长时间。请注意,如果您已经启动并运行了一个,您应该通过您的 mongos 连接同时运行 shell 和 C# 连接。

于 2012-12-21T20:08:18.920 回答
1

这可能不是一个决定性的答案,但我现在要做的只是调试 mongo 连接,中间没有 c# 应用程序:使用 mongo shell 查询并连接到远程服务器(centos 和 windows,都配置为具有相同数据的副本)。
如果这里有显着差异,那么我会查看 VM/OS 配置(网络适配器、网络配置等)。

如果没有区别,我会使用 mongo 配置(读取首选项、从属等)来找出究竟是什么阻碍了性能。

于 2013-01-04T19:18:34.037 回答