繁体   English   中英

Mongos节流查询速度

[英]Mongos throttling query speed

我有一个mongo v2.6.4集群,其中:

  • 2个运行mongos实例的应用服务器
  • 3个独立的配置服务器
  • 副本集中的3个mongod服务器

从应用程序服务器,我可以毫无问题地连接到群集。 但是,每个服务器每秒只能查询约1k次(此数字来自使用Java驱动程序的小集合中的quickfindOne)。 在小型虚拟机上的开发环境中,使用相同的测试应用程序每秒可以看到超过4k的查询。

真正奇怪的是,如果我添加更多的应用程序服务器,我可以同时从每个应用程序服务器每秒获得约1000个查询(即4个应用程序服务器每秒可以总共获得约4000个查询)。 这使我相信mongos设置有问题,这限制了查询性能。

我疯了吗? 有什么办法可以提高蒙哥人的表现吗?


编辑1(添加示例代码和有关mongos config的详细信息)

mongos配置默认为100%,除了

configdb=server1,server2,server3
maxConns=10000

在其中一台应用程序服务器上运行的快速测试的代码

import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.MongoClient;

class Tester {

    public static void main (String[] args) {

        try {

            MongoClient mongoClient = new MongoClient("192.168.1.100");

            DB db = mongoClient.getDB("my_db");

            db.authenticate("my_user", "my_passwd".toCharArray());

            DBCollection coll = db.getCollection("my_collection");

            long counter = 10000l;

            long start = System.currentTimeMillis();

            for (int i=0; i<counter; i++){
                coll.findOne();
            }

            double totalTime = (System.currentTimeMillis() - start) / 1000.0;

            System.out.println(counter + " counter find operations in " + totalTime + " seconds (" + (counter/totalTime) + " per second)");

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

根据这里的信息,我认为最可能的解释是:测试代码是单线程的。 当您使用单线程代码进行测试时,您正在衡量的是操作的延迟,而不是吞吐量,因为MongoDB可以同时执行许多操作(在限制因素/缓慢的步骤是单个操作的延迟的意义上,仅测量延迟),因此吞吐量数字不是可以预期的最好)。 吞吐量数字并不表示此设置中MongoDB的实际吞吐量限制。 这适用于所有设置,因为它是相同的测试代码。 分片,副本和本地测试的不同编号仅表示这些设置具有不同的延迟。 考虑到分片设置中发生的配置服务器检查,延迟顺序分片>副本>本地有意义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM