基于Java客户端的数据库性能测试

基于Java客户端的数据库性能测试,java,database,jpa,Java,Database,Jpa,我有一个学校项目,需要我做一些Java客户机来连接不同的SQL数据库和一个NoSQL(MongoDB) 对于SQL DB,我使用JPA简化了自己 这就是我使用JPA插入数据库的方式 EntityManager entityManager= ENTITY_MANAGER_FACTORY.createEntityManager(); EntityTransaction et = entityManager.getTransaction(); et.begin(); int index_flush =

我有一个学校项目,需要我做一些Java客户机来连接不同的SQL数据库和一个NoSQL(MongoDB)
对于SQL DB,我使用JPA简化了自己

这就是我使用JPA插入数据库的方式

EntityManager entityManager= ENTITY_MANAGER_FACTORY.createEntityManager();
EntityTransaction et = entityManager.getTransaction();
et.begin();
int index_flush = 1;
for(Iterator<Book> it = bookList.iterator(); it.hasNext();) {
    book = it.next();
    entityManager.persist(book);

    if((flush_index % 20) == 0) {
        entityManager.flush();
        entityManager.clear();
    }
    flush_index++;
}           
et.commit();
EntityManager EntityManager=ENTITY_MANAGER_FACTORY.createEntityManager();
EntityTransaction et=entityManager.getTransaction();
等开始();
int index_flush=1;
for(Iterator it=bookList.Iterator();it.hasNext();){
book=it.next();
entityManager.persist(book);
如果((刷新索引%20)=0){
entityManager.flush();
entityManager.clear();
}
flush_index++;
}           
et.commit();
我的问题是:在哪里测量执行时间?
我知道的是
entityManager.persist
entityManager.flush
实际上并不与数据库通信。只有在调用实体事务提交时才能看到数据库上的更改
我是否只需要测量完成提交所需的时间?


提前谢谢!如果我的解释不清楚,请告诉我。

Flush执行SQL语句。因此,您可以测量刷新所需的时间。

flush执行SQL语句。因此,您可以测量刷新所需的时间。

这可能是因为它们处于不同的事务中。 1由JPA发起的交易 2通过使用SQL开发人员/工具检查数据库中的行来启动事务

您可以尝试在sql开发人员/工具中将隔离级别设置为“读取未提交”,以查看已刷新但未提交的未提交更改


尽管不建议在应用程序级别设置事务级别read uncommitted。

这可能是因为它们位于不同的事务中。 1由JPA发起的交易 2通过使用SQL开发人员/工具检查数据库中的行来启动事务

您可以尝试在sql开发人员/工具中将隔离级别设置为“读取未提交”,以查看已刷新但未提交的未提交更改


尽管不建议在应用程序级别设置事务级别read uncommitted。

有趣。在事务提交之前,我看不到数据库中有任何更改。我需要为此设置一些参数吗?@Alexandru更改仅在刷新自身的事务中可见,在事务(drumroll)-committed.interest之前,不会提交给其他人查看。在事务提交之前,我看不到数据库中有任何更改。我需要为此设置一些参数吗?@Alexandru更改仅在刷新自身的事务中可见,在事务(drumroll)提交之前,不会提交给其他人查看。我猜您指的是Simon评论中留下的回复。我会试试你说的。现在知道flush实际上在DB中做了一些事情,我认为正确的度量应该是计算flush和commit所需的时间总和。你认为这是正确的吗?是的,我指的就是这个。是的,刷新和提交所花费的累计时间应该提供总时间。这可能有些过分,但你可以使用探查器来检查需要多少时间。你能给我指一个例子或探查器的解释吗。我真的不知道那是什么。谢谢你可以像你的工具包一样下载profiler(虽然是付费的,但你可以选择试用)。安装探查器后,如果您在windows上运行应用程序,则可以将其连接到正在运行的JVM,并可以捕获快照,然后可以脱机查看。快照将提供有关sql中每个查询和java中方法调用所用时间的详细信息。此外,它将为您提供有关堆和ram利用率的详细信息。您可以执行负载测试并检查应用程序的吞吐量。谢谢您提供的信息。我会试试的!我猜你指的是西蒙评论中留下的回复。我会试试你说的。现在知道flush实际上在DB中做了一些事情,我认为正确的度量应该是计算flush和commit所需的时间总和。你认为这是正确的吗?是的,我指的就是这个。是的,刷新和提交所花费的累计时间应该提供总时间。这可能有些过分,但你可以使用探查器来检查需要多少时间。你能给我指一个例子或探查器的解释吗。我真的不知道那是什么。谢谢你可以像你的工具包一样下载profiler(虽然是付费的,但你可以选择试用)。安装探查器后,如果您在windows上运行应用程序,则可以将其连接到正在运行的JVM,并可以捕获快照,然后可以脱机查看。快照将提供有关sql中每个查询和java中方法调用所用时间的详细信息。此外,它将为您提供有关堆和ram利用率的详细信息。您可以执行负载测试并检查应用程序的吞吐量。谢谢您提供的信息。我会试试的!