Chunk Commit 이란?
대량 데이터를 처리하면서 수만~수십만 건을 한 번에 UPDATE/INSERT/DELETE 해야 하는 경우가 많음. 이때 모든 작업을 하나의 트랜잭션으로 처리하면 다음과 같은 문제가 생긴다
- 트랜잭션이 길어짐 → 락(lock) 유지 시간 증가
- undo/redo 로그 폭증
- 메모리 사용량 증가
- 중간에 장애 나면 전체 롤백
- 성능 저하 및 타 업무 영향 가능
그래서 등장한 방식이 바로 Chunk Commit(청크 커밋)
왜 Chunk Commit 을 쓸까?
✔ 장점
- 락 유지 시간이 짧아짐
→ 다른 트랜잭션과 충돌 감소 - 로그 폭증 방지
→ undo/redo 부담 줄임 - Wake-up 효과
→ Full GC나 리소스 부담을 줄여줌 - 부분 성공 가능
→ 장애 시 재처리 범위 축소
단점
- 트랜잭션이 논리적으로 쪼개짐
→ “All or Nothing” 보장이 깨질 수 있음 - Chunk 사이에 데이터가 바뀔 수 있음
→ 동시성 처리 시 주의 필요 - 중간 실패 처리 로직 필요
→ 재수행 전략 / 중복방지 필요
그래서 비즈니스적으로 완전 무결 트랜잭션이 필요한 업무에는 부적합할 수 있습니다.
Oracle 기준 Chunk 크기는 얼마나 잡을까?
정답은 없음
하지만 일반적인 가이드라인은 아래처럼 많이 사용
환경추천 Chunk 크기
| 소규모 트래픽 / 테스트 | 1,000 ~ 5,000건 |
| 일반 업무 시스템 | 5,000 ~ 20,000건 |
| 고성능 DB + 배치 서버 | 20,000 ~ 50,000건 |
'Backend' 카테고리의 다른 글
| @Transactional(propagation = REQUIRES_NEW) 주의할점 (0) | 2026.01.11 |
|---|---|
| @Transactional(propagation = REQUIRES_NEW) (0) | 2026.01.04 |
| JVM GC (0) | 2025.12.21 |
| 웹서버 ServerTokens, ServerSignature 설정 (0) | 2025.12.07 |
| JTA(Transaction) Timeout (0) | 2025.11.30 |