6. 정리
한 행씩 처리는 행마다 네트워크 왕복·파싱·커밋 비용이 들어 집합 처리 한 문장보다 느립니다. INSERT ... SELECT, 여러 행 VALUES, CASE 를 쓴 집합 UPDATE 로 가능한 한 한 문장에 끝냅니다. 여러 행 VALUES 는 MySQL 과 MSSQL 2008 이상에서 되고, Oracle 은 23ai 부터입니다.
한 트랜잭션이 너무 크면 로그가 커지고 잠금이 오래가며 롤백도 느려서, 1,000~10,000건 단위로 나눠 청크마다 COMMIT 합니다. 너무 잘게 나누면 커밋 대기가 쌓이므로 측정으로 조정합니다. 청크 문법은 Oracle ROWNUM·FETCH FIRST, MySQL LIMIT, MSSQL TOP 입니다.
중간 실패에 대비해 마지막 키나 처리 표시 컬럼으로 재시작 지점을 남기고, 다시 돌려도 같은 결과가 되게 만듭니다. 끝나면 실무 09 이관·검증처럼 건수·합계·누락·중복·미처리를 대사합니다. JDBC 배치는 addBatch 와 executeBatch 를 1,000건마다 커밋하고 마지막 잔여분을 처리하며, 수백만 건 초기 적재는 직접 경로 INSERT, LOAD DATA, BULK INSERT 같은 전용 도구를 씁니다.
다음 레슨은 락과 데드락입니다. 대량 갱신이 다른 세션을 얼마나 막는지와 데드락을 피하는 방법을 다룹니다.