본문 바로가기
Backend

Chunk Commit

by 당리 2025. 12. 28.

Chunk Commit 이란? 

대량 데이터를 처리하면서 수만~수십만 건을 한 번에 UPDATE/INSERT/DELETE 해야 하는 경우가 많음. 이때 모든 작업을 하나의 트랜잭션으로 처리하면 다음과 같은 문제가 생긴다

  • 트랜잭션이 길어짐 → 락(lock) 유지 시간 증가
  • undo/redo 로그 폭증
  • 메모리 사용량 증가
  • 중간에 장애 나면 전체 롤백
  • 성능 저하 및 타 업무 영향 가능

그래서 등장한 방식이 바로 Chunk Commit(청크 커밋) 

 

 

왜 Chunk Commit 을 쓸까?

✔ 장점

  1. 락 유지 시간이 짧아짐
    → 다른 트랜잭션과 충돌 감소
  2. 로그 폭증 방지
    → undo/redo 부담 줄임
  3. Wake-up 효과
    → Full GC나 리소스 부담을 줄여줌
  4. 부분 성공 가능
    → 장애 시 재처리 범위 축소

 

 

 

단점

  1. 트랜잭션이 논리적으로 쪼개짐
    → “All or Nothing” 보장이 깨질 수 있음
  2. Chunk 사이에 데이터가 바뀔 수 있음
    → 동시성 처리 시 주의 필요
  3. 중간 실패 처리 로직 필요
    → 재수행 전략 / 중복방지 필요

그래서 비즈니스적으로 완전 무결 트랜잭션이 필요한 업무에는 부적합할 수 있습니다.

 

 

 

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