我想通過從多個線程調用以下方法來測試我的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中進行任何設置? –