我想通过从多个线程调用以下方法来测试我的SPRING MVC服务性能。该方法使用Hibernate获取记录,然后再次更新。 但似乎所有线程都按顺序执行,而不是并行执行。Java休眠 - 让多个线程同时运行
我的服务方法
@Transactional
public String performOperation() {
USER user = dao.findUsr("name");
user.setMarks(50);
}
我的测试应用程序
*Round 1*
thread1.start() : For Only T1, It takes time to execute : 5 Sec
*Round 2*
thread1.start()
thread2.start() : With T1 and T2: 10 Sec
*Round 3*
thread1.start()
thread2.start()
thread3.start() : With T1, T2, T3: 15 sec
*Round 4*
thread1.start()
thread2.start()
thread3.start()
thread4.start() : With T1, T2, T3, T4: 20 sec
我的配置
jdbc.initial.pool.size=10
jdbc.min.pool.size=10
jdbc.max.pool.size=120
不设置任何低于设置:因此,采取默认值,它
- current_session_context_class
- cache
观察:即使是5000每线程循环,利用最大DB池大小为25.在MySQL仪表板观察
问题 如果你看到它没有并行执行。 Hibernate正在锁定我猜的那一行。你可以提供任何指针来同时运行它。
在你的例子中,你正在更新单行作为唯一的行动(以及你正在阅读它,但这很不值得一提,因为行被锁定)。没有办法同时做到这一点,这就是为什么你没有获得任何性能使用额外的线程 –
Thx的答复。只想添加一个要点,在我的方法findUsr(“名称”)中,名称总是不同的。所以所有线程都在不同的行上工作。如果我启动4个线程,如果它们具有不同的名称,则选择不同的行。我可以看到行随机更新为db,但执行所需的总时间按顺序增加。使用MySQL数据库,仅供参考 –
任何人,对此的任何评论;我们是否需要在Hibernate或MYSQL中进行任何设置? –