O0oO0Oo / netty-reservation-service

트랜잭션, 동시성을 공부하기 위한 토이 프로젝트입니다.
0 stars 0 forks source link

feat: simple jmeter test setup #15

Closed O0oO0Oo closed 4 months ago

O0oO0Oo commented 4 months ago

PR 설명

낙관/비관 락 등 아무런 조치를 취하지 않았을때, 트랜잭션 동시성 문제가 발생하는것을 확인하기 위한 jemter 테스트

변경 사항

배경

동일한 엔티티에 대해 여러 수정 요청이 발생한다면, 실제로 문제가 발생하는지 확인하기 위해 테스트를 작성하였고 다음과 같은 결과를 얻었다.

데드락이 발생.

2024-06-10T09:29:57.591+09:00  WARN 223492 --- [reservation] [tLoopGroup-1-11] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1213, SQLState: 40001
...
2024-06-10T09:29:57.591+09:00 ERROR 223492 --- [reservation] [ntLoopGroup-1-8] o.h.engine.jdbc.spi.SqlExceptionHelper   : Deadlock found when trying to get lock; try restarting transaction
...
2024-06-10T09:29:58.501+09:00 ERROR 223492 --- [reservation] [tLoopGroup-1-14] c.s.r.n.http.handler.ExceptionHandler    : Exception, could not execute statement [Deadlock found when trying to get lock; try restarting transaction] [update reservable_item set business_id=?,is_available=?,last_modified_time=?,max_quantity_per_user=?,name=?,price=?,quantity=?,reservable_time=? where item_id=?]; SQL [update reservable_item set business_id=?,is_available=?,last_modified_time=?,max_quantity_per_user=?,name=?,price=?,quantity=?,reservable_time=? where item_id=?]

테스트 결과 아이템은 초기에 50개가 있었고 50개가 소비되었지만, 유저는 수량을 초과하여 82개를 구매하였다.

실행 전 image

실행 후 image

jmeter 테스트 결과

summary +   3549 in 00:00:19 =  187.9/s Avg:  7390 Min:   171 Max: 17601 Err:  3498 (98.56%) Active: 6452 Started: 10000 Finished: 3548
summary +   6451 in 00:00:18 =  364.5/s Avg: 15032 Min:  6843 Max: 22310 Err:  6420 (99.52%) Active: 0 Started: 10000 Finished: 10000
summary =  10000 in 00:00:37 =  273.3/s Avg: 12320 Min:   171 Max: 22310 Err:  9918 (99.18%)

관련 이슈

10

추가 정보