基于Java客户端的数据库性能测试
我有一个学校项目,需要我做一些Java客户机来连接不同的SQL数据库和一个NoSQL(MongoDB)基于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 =
对于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利用率的详细信息。您可以执行负载测试并检查应用程序的吞吐量。谢谢您提供的信息。我会试试的!