k6 - DB Worker delay
1. 100count / 5s
k6는 테스트를 진행해서 끝났는데, insert는 계속되는 문제가 발생했다.
현재 로직은 5초마다 최대 100개의 메세지를 처리하도록 되어있는데 이 수치를 조정해서 보완해보려고 한다.
2. 10,000count / 5s
'20분 -> 1분'으로 많이 줄었지만, 그래도 1분 이상 차이가 난다.
아무래도 한번 메세지를 받을 때마다 5초의 딜레이가 있다보니 거기서 나오는 문제로 예상된다.
1초로 바꿔보자.
3. 10,000count / 1s
이제 1분 안으로 들어왔다.
다만 1초로 줄였음에도 30초가 넘는 차이가 나는게 이상한데, 아무래도 saveAll()이 하나씩 insert 하다보니까 생기는 문제가 아닐까 생각해봤다. Bulk insert가 가능하도록 로직을 보완하고 다시 시도해보자.
4. 10,000count / 1s / Batch Bulk Insert
Id 방식을 GenerationType.SEQUENCE 로 변경하는 방안이 있다.
하지만 SEQUENCE 는 auto_increment가 아니라 DB에서 ID 시퀀스를 별도로 관리하고, MySQL에서는 작동을 안한다고 해서 직접 JDBC insert 를 쓰는 방식으로 하기로 했다.
private JdbcTemplate jdbcTemplate;
public void batchInsertCouponIssues(List<CouponIssues> issues) {
jdbcTemplate.batchUpdate(
"INSERT INTO coupon_issues (coupon_id, user_id, created_at) VALUES (?, ?, ?)",
new BatchPreparedStatementSetter() {
public void setValues(PreparedStatement ps, int i) throws SQLException {
CouponIssues issue = issues.get(i);
ps.setLong(1, issue.getCoupons().getId());
ps.setString(2, issue.getUserId());
ps.setTimestamp(3, issue.getCreatedAt());
}
public int getBatchSize() {
return issues.size();
}
}
);
log.info("CouponIssues Inserted: {}", issues.size());
}
BatchRepository 생성 후 직접 쿼리를 작성해줬다.
1초 차이가 났다!
혹시 1초마다 실행시키지 않더라도 큰 차이가 없게 할 수 있는지도 확인해보고싶다.
5. 10,000count / 5s / Batch Bulk Insert
28초의 차이를 보였다.
아무래도 5초에 한번씩 쿼리를 하는거나 마찬가지이기 때문에 차이가 생길 수 밖에 없는 것 같다.
하지만 1초씩 saveAll() 했을 때보단 20초나 빠르다.
분류 | k6 | insert | 차이 |
1. 100count / 5s | 11:40:09 | 12:00:26 (중간에 중단) | 20분 17초 |
2. 10,000count / 5s | 12:04:30 | 12:05:44 | 1분 14초 |
3. 10,000count / 1s | 12:09:49 | 12:10:37 | 48초 |
4. 10,000count / 1s / Batch Bulk Insert | 12:54:22 | 12:54:23 | 1초 |
5. 10,000count / 5s / Batch Bulk Insert |
13:06:57 | 13:07:25 | 28초 |
BulkInsert 설정으로 Redis와 DB의 차이를 최대 20분 -> 1초로 줄였다.
실시간성을 유지하기 위해서는 Worker 딜레이를 1초로 설정하는 수밖에 없는 것 같다.
'프로젝트 > 쿠폰' 카테고리의 다른 글
[쿠폰] 테스트를 위한 k6 + InfluxDB + Grafana 구성 (1) | 2025.04.30 |
---|---|
[쿠폰] 쿠폰 발급 수정 (saveAll, @Transactional) (0) | 2025.04.29 |
[쿠폰] 쿠폰 발급 (Redis Stream, CustomDbWorker) (0) | 2025.04.29 |
[쿠폰] 쿠폰 조회 (Redis 예외처리) (0) | 2025.04.28 |
[쿠폰] 쿠폰 생성 (@Transactional, CustomException) (0) | 2025.04.28 |