bulk DML
대량 변경은 작은 범위, 짧은 커밋, 재시작 기준으로 나눈다
수백만 행을 한 번에 바꾸면 락, 로그, 복제 지연이 커진다. 키 범위를 나누고 지표를 보며 속도를 조절해야 한다.
01 대상 고정
변경할 PK 목록이나 시간 범위를 먼저 확정한다.
02 작은 실행
서비스 부하에 맞춰 천 건 또는 만 건 단위로 자른다.
03 짧은 커밋
각 단위마다 커밋해 장기 락과 로그 폭증을 줄인다.
04 지표 확인
대기와 복제 지연이 커지면 속도를 낮춘다.
05 재시작
실패 후 마지막 성공 키 다음부터 이어서 처리한다.
| 점검 | 위험 | 확인 기준 | 운영 조치 |
|---|---|---|---|
| 인덱스 | 조건이 인덱스를 타지 않으면 전체 테이블을 반복 스캔한다. | 실행 계획과 예상 변경 건수를 먼저 본다. | 배치 WHERE 조건을 인덱스 가능한 범위로 만든다. |
| 락 | 긴 트랜잭션이 읽기와 쓰기를 오래 막는다. | 락 대기 시간과 타임아웃을 관찰한다. | 청크 크기를 줄이고 커밋 간격을 짧게 둔다. |
| 로그 | 쓰기 로그가 급증해 저장 공간과 복구 시간이 커진다. | WAL/binlog 증가량과 디스크 여유를 본다. | 처리 속도를 조절하고 피크 시간을 피한다. |
| 복제 | 읽기 복제본 지연으로 사용자 조회가 낡아진다. | replica lag와 오류율을 함께 본다. | 지연이 커지면 일시 정지하거나 청크를 줄인다. |
대량 UPDATE와 DELETE는 SQL 한 줄의 문제가 아니라 락, 로그, 복제, 재시작 기준을 함께 설계하는 운영 작업이다.