[英]Mongos throttling query speed
我有一个mongo v2.6.4集群,其中:
从应用程序服务器,我可以毫无问题地连接到群集。 但是,每个服务器每秒只能查询约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.