홈 › 대용량·배치 › 06 / 8

대량 INSERT·UPDATE 와 배치 커밋

집합 처리, 나눠서 커밋, JDBC 배치
섹션 6진행 0 / 8

5. 자주 하는 실수 (Tip)

실수 1: 반복문으로 한 행씩 처리한다

원천과 대상이 모두 DB 안에 있으면 INSERT ... SELECT 와 집합 UPDATE 로 한 문장에 끝낼 수 있습니다. 행마다 왕복·파싱·커밋 비용이 들지 않습니다. 반복문은 애플리케이션에서 계산해야 하는 값이 있을 때만 씁니다.

실수 2: 청크마다 커밋하면서 재시작 지점을 남기지 않는다

중간에 실패하면 이미 커밋된 청크는 남습니다. 마지막 키나 processed_yn 이 없으면 어디까지 했는지 알 수 없어, 전부 지우고 처음부터 하거나 중복 적재가 생깁니다. 청크를 커밋할 때 같은 트랜잭션 안에서 진행 상황도 갱신합니다.

실수 3: 커밋 단위를 극단적으로 잡는다

한 번에 수천만 건을 커밋하면 로그와 잠금이 부풀고, 1건씩 커밋하면 로그 기록 대기가 쌓입니다. 1,000~10,000건 단위로 시작해 실제 환경에서 측정하고 조정합니다.

실수 4: 재실행하면 결과가 달라진다

같은 배치를 두 번 돌리면 중복 적재되는 구조는 위험합니다. NOT EXISTS 나 처리 표시 컬럼으로 이미 한 것은 건너뛰게 하고, 끝난 뒤 건수 대사로 확인합니다. 고급 08 MERGE 도 원천과 대상을 키로 맞춰 재실행에 안전한 형태를 만드는 도구입니다.

팁

배치는 "몇 건씩 처리했는가" 를 로그로 남깁니다. 청크 번호, 시작·끝 키, 처리 건수, 소요 시간을 남기면 실패 위치 파악과 청크 크기 조정에 그대로 쓸 수 있습니다.