Performance 蒙戈表演

Performance 蒙戈表演,performance,mongodb,spring-data,spring-mongo,Performance,Mongodb,Spring Data,Spring Mongo,我们的测试工具创建n个线程,并在每个线程内执行m次迭代。 我们计算最小、平均和最大操作时间。 因此,我们不时看到mongo执行请求的速度非常慢,最慢可达几秒钟。 而且每次第一次操作都是最慢的,我们甚至故意将其从统计数据中排除 平均值和最大值之间的差别仍然很大。这正常吗?我能消除那些缓慢的操作吗?为什么mongo执行某些请求的速度如此之慢 下面是我们同时运行insert/get/remove/update测试时单一操作模式和混合模式的结果。在混合模式下,thread=1意味着我们为每种测试类型创建

我们的测试工具创建n个线程,并在每个线程内执行m次迭代。 我们计算最小、平均和最大操作时间。 因此,我们不时看到mongo执行请求的速度非常慢,最慢可达几秒钟。 而且每次第一次操作都是最慢的,我们甚至故意将其从统计数据中排除 平均值和最大值之间的差别仍然很大。这正常吗?我能消除那些缓慢的操作吗?为什么mongo执行某些请求的速度如此之慢

下面是我们同时运行insert/get/remove/update测试时单一操作模式和混合模式的结果。在混合模式下,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
.......

我看不出为什么会发生这种情况

  • 这不是因为mongoDB,可能是因为java进程。开始启动并在内存中加载(分配内存)相关变量需要时间
  • 使用MongoDB的监控工具MMS查看数据库是否是瓶颈。您可以检查数据库上的锁、网络使用情况、内存使用情况
  • MongoDB获取当前版本的数据库级锁。因此,如果查询访问的是同一个数据库(单个数据库的不同或相同集合),则可能会降低操作速度
  • 此外,添加更多线程并不一定会提高性能。由于CPU、内存(RAM)等的额外负载,它可能会降低性能。因此,我建议在频繁间隔后增加线程数,然后观察性能何时停止改善 我相信如果你这样做,你会发现它减速的确切原因


    干杯

    我认为这是一种预期行为,无论何时执行查询,都会缓存(获胜的)查询计划以供进一步检索

    该查询缓存也会一次又一次地被转储,因此偶尔需要更长的时间

    在您的情况下,某些查询似乎代价高昂,我认为您需要识别这些查询并采取措施提高性能,如果是读取查询,可能需要(复合)索引

    如果是写查询,则需要进一步分析,它是什么类型的集合?它有什么索引,文档的数量是多少


    以下是有关

    的更多信息。您是否编写了与链接的测试完全相同的测试?他们的代码正在进行大批量插入,这应该表现得很好。更重要的是,你的问题是什么?事实上不是。我的代码是用java编写的,我创建了许多线程并逐个插入文档。但我仍然认为性能应该更好,对于一些随机操作,可以不延迟10秒。行不行?也许我必须正确配置mongodb如果要比较性能,则需要执行相同的操作。如果没有更多关于配置、硬件、网络等的详细信息,很难说你得到的是不是有意义。好吧,你说得对。忘记比较吧。我刚刚做了测试,发现有些操作非常慢。可以吗?我只是在没有任何特定配置的情况下安装了mongodb。如果您还没有安装,您需要阅读以下内容:(以及它链接到的页面)。