在Centos 6下Mongo读取速度慢

时间:2012-12-21 12:46:48

标签: mongodb networking

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

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

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

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

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

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

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

C#.NET 4.5(Windows上分离,IIS和单Mongo)读取2000行:AvgObj 2600字节〜600ms

所有服务器都在使用Hyper-V核心服务器的单个物理计算机上运行。

我正在使用最新的C#MongoDB Driver 1.7版本。从我在命令shell中测试的,在所有mongo服务器上,我的查询在10ms内执行。

任何人都可以向我提出建议,为什么我在分离的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
                        }
                };

3 个答案:

答案 0 :(得分:3)

为了在Hyper V上获得最佳性能,请确保使用常规网络适配器(非传统),并在客户机操作系统内部安装Integration Services。

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

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

答案 1 :(得分:1)

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

尝试运行JS循环以检索shell中的所有记录,并查看所需的时间。请注意,如果您已经启动并运行了mongos连接,则应该同时运行shell和C#连接。

答案 2 :(得分:1)

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

如果没有区别,我会使用mongo配置(读取首选项,从属设备等)以找出妨碍性能的确切因素。