Hibernate 批量操作性能

Hibernate Batch Operation performance

我有大约 5000 条记录要更新。我正在尝试衡量操作的性能。它从大约 100 毫秒开始,但在每千次更新后,操作时间增加大约 80 毫秒。为什么会变慢? JVM?

StatelessSession session = dao.getStatelessSession();
Transaction transaction = session.beginTransaction();
try {
    List<Entity> list = dao.findAll();
    int counter = 0;
    for (Entity each : list) {
        final Date startTime = Clock.getTime();
        webService.execute(each);
        session.update(each);
        counter += 1;
        final Date endTime = Clock.getTime();
        LOGGER.info("***** " + getMilliSecondsDifference(startTime, endTime) + " for count: " + counter + "*****");
    }
} catch (Exception e) {
    LOGGER.info("***** Exception occured : ", e);
} finally {
    transaction.commit();
    session.close();
}

您有一个事务处理大量的对象。在这里你可能也会有内存泄漏和性能问题。 对象引用将保留在内存中,直到执行会话刷新(提交)。因此,除了有关对象更改的大量信息外,内存中还会有大量对象,这些信息也将保留在休眠会话中并且也会改变性能(我不是休眠专家,但你应该考虑这一点) 我认为您可能会考虑使用大量事务

查看这些有趣的链接:

Transaction Management for bulk operations

Hibernate session and Transaction Management Guidelines

祝你好运

侯赛因

如果我们查看您的代码,那根本就不是休眠问题。 我建议您注释掉与网络服务调用相关的行。

那请重试batch hql 运行.

也许网络会变慢。