我们的测试工具创建n个线程,并在每个线程内执行m次迭代。我们计算最小,平均和最大操作时间。因此,我们会不时看到mongo执行请求的速度非常慢-长达几秒钟。同样,每次首次操作最慢时,我们甚至有意将其从统计数据中排除,而avg和max之间的差异仍然很大。正常吗 我可以消除那些缓慢的操作吗?为什么mongo执行某些请求的速度如此之慢?
下面是我们同时运行插入/获取/删除/更新测试时的单操作模式和混合模式的结果。在混合模式下,thread = 1表示我们为每种测试类型创建了4个线程
我们使用默认值-每个主机100个连接
资源
public void storeMt(MyTestObject myTestObject) { mongoTemplate.insert(myTestObject ); } public MyTestObject getMt(long id) { MyTestObject result = mongoTemplate.findById(id, MyTestObject.class); return result; } @Document public class MyTestObject implements Serializable { private static final long serialVersionUID = 1L; @Id private long id; //class contains 20+ fields .......
小智.. 5
我看不出为什么会发生这种情况。
这不是由于mongoDB,可能是由于Java进程。开始并在内存中加载(分配内存)相关变量需要花费一些时间。
使用MMS(MongoDB的监视工具)来查看数据库是否为瓶颈。您可以检查数据库锁,网络使用率,内存使用率。
MongoDB获取当前版本的数据库级别的锁定。因此,如果您的查询命中相同的数据库(单个数据库的不同或相同集合),则可能会减慢操作速度。
另外,添加更多线程并不一定会提高性能。由于CPU,内存(RAM)等上的额外负载,它可能会降低性能。因此,我建议在频繁间隔后增加线程数,然后查看性能何时停止改善。
我敢肯定,如果您这样做,您将找出速度变慢的确切原因。
干杯!
我看不出为什么会发生这种情况。
这不是由于mongoDB,可能是由于Java进程。开始并在内存中加载(分配内存)相关变量需要花费一些时间。
使用MMS(MongoDB的监视工具)来查看数据库是否为瓶颈。您可以检查数据库锁,网络使用率,内存使用率。
MongoDB获取当前版本的数据库级别的锁定。因此,如果您的查询命中相同的数据库(单个数据库的不同或相同集合),则可能会减慢操作速度。
另外,添加更多线程并不一定会提高性能。由于CPU,内存(RAM)等上的额外负载,它可能会降低性能。因此,我建议在频繁间隔后增加线程数,然后查看性能何时停止改善。
我敢肯定,如果您这样做,您将找出速度变慢的确切原因。
干杯!