【问题标题】:Database performance testing using Java client使用 Java 客户端进行数据库性能测试
【发布时间】:2023-03-15 19:25:02
【问题描述】:

我有一个学校项目,需要我做一些 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.persistentityManager.flush 实际上并没有与数据库通信。只有在调用实体事务提交时才能看到 DB 上的更改。
我只需要测量完成该提交所需的时间吗?

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

【问题讨论】:

    标签: java database jpa


    【解决方案1】:

    这可能是因为它们在不同的交易中。 1 JPA发起的交易 2 使用 SQL 开发者/工具检查数据库中的行发起的事务。

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

    虽然不建议在应用程序级别设置未提交的事务级别读取。

    【讨论】:

    • 我猜你指的是西蒙评论留下的回复。我会试试你提到的。现在知道刷新实际上在数据库中做了一些事情,我认为正确的测量将是对刷新和提交所需的时间进行总和。你觉得这样对吗?
    • 是的,我指的是。是的,刷新和提交所花费的累积时间应该提供总时间。这可能有点矫枉过正,但你可以使用探查器来检查需要多少时间
    • 你能给我指出 profiler 的例子或解释吗?我真的不知道它是什么。谢谢
    • 您可以像 yourkit 一样下载分析器(虽然是付费的,但您可以选择试用)。安装分析器后,如果您在 Windows 上运行应用程序,您可以将其附加到正在运行的 JVM并且可以捕获快照然后可以离线查看它。快照将深入了解每个查询在 sql 中和 java 中的方法调用所花费的时间。此外,它还将为您提供有关堆和 ram 利用率的详细信息。您可以执行加载测试并检查您的应用程序的吞吐量。谢谢
    • 感谢您提供的信息。我会试试的!
    【解决方案2】:

    Flush 确实执行 SQL 语句。这样您就可以测量冲洗所需的时间。

    【讨论】:

    • 有趣。在事务提交之前,我看不到数据库中的任何更改。我需要为此设置一些参数吗?
    • @Alexandru 更改仅在您刷新的事务中可见,它们不会提交给世界其他地方,直到事务(鼓声) - 提交。
    猜你喜欢
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多