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

대량 INSERT·UPDATE 와 배치 커밋

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

대량 INSERT·UPDATE 와 배치 커밋: 집합 처리, 나눠서 커밋, JDBC 배치

수백만 건을 적재하거나 고치는 배치는 한 행씩 돌리면 너무 느리고, 한 트랜잭션에 통째로 넣으면 로그와 잠금이 부풀어 실패합니다. 이 레슨은 집합 처리 한 문장, 일정 건수씩 나눠 커밋하는 방법, 중간 실패에서 다시 시작하는 방법, JDBC 배치를 다룹니다.

1. 왜 배우는가

배치 프로그램의 첫 버전은 보통 한 행씩 읽어 한 행씩 INSERT 하는 반복문입니다. 건수가 적을 때는 문제가 없지만 수백만 건이 되면 행마다 드는 비용이 쌓입니다. SQL 한 문장으로 끝낼 수 있는 일을 반복문으로 돌리지 않는 것이 첫 번째 규칙입니다.

반대로 한 문장이 너무 커도 문제입니다. 한 트랜잭션이 수천만 건을 바꾸면 언두·로그가 커지고 잠금이 오래 유지되며, 중간에 실패하면 롤백도 오래 걸립니다. 그래서 적당한 크기로 나눠 커밋하고, 어디까지 했는지 기록해 다시 돌려도 안전하게 만듭니다.

이 레슨은 실무 06 트랜잭션, 실무 09 이관·검증, 고급 08 MERGE, 대용량 05 파티션을 안다고 보고 진행합니다.

주의

이 레슨의 sql 은 H2 로 건수와 결과만 확인했고 속도는 측정하지 않았습니다. 속도는 환경에 따라 크게 달라 H2 숫자는 근거가 되지 않습니다. 효과는 설명과 도식(H2 미지원, 실행 결과 아님)으로 보입니다.