대용량 삭제·아카이빙: 나눠서 삭제, 남길 것만 옮기기, 보관 테이블
오래된 로그·이력을 지우는 일은 쌓아 두다가 어느 날 한 번에 하려 하면 가장 많이 사고가 납니다. 이 레슨은 기준일 이전 행을 나눠서 삭제하는 방법, 지우기 전에 보관 표로 옮기는 방법, 대부분을 지워야 할 때 남길 행만 새 표로 옮겨 바꿔치기하는 방법, 그리고 삭제 뒤 공간 회수를 다룹니다.
1. 왜 배우는가
로그·이력·임시 데이터는 계속 쌓입니다. 표가 커지면 조회도 느려지고 백업도 오래 걸려서, 어느 시점에는 기준일이 지난 행을 지워야 합니다. 문제는 지우는 양입니다. 수천만 건을 DELETE 한 문장으로 지우면 행마다 언두·로그를 남기므로 오래 걸리고, 그동안 잠금을 잡고 있어 다른 작업이 기다리며, 중간에 실패하면 롤백도 그만큼 오래 걸립니다.
그래서 삭제도 대용량 06 대량 처리처럼 나눠서 하고, 청크마다 커밋합니다. 지운 데이터를 나중에 볼 일이 있으면 지우기 전에 보관 표로 옮기고, 옮긴 건수를 대사해서 유실이 없는지 확인합니다. 지울 양이 남길 양보다 훨씬 많다면 지우지 않고 남길 것만 옮기는 편이 더 빠릅니다.
이 레슨은 대용량 05 파티션, 대용량 06 대량 처리, 대용량 07 락, 실무 09 이관·검증, 중급 08 DDL 을 안다고 보고 진행합니다. 대용량·배치 카테고리의 마지막 레슨입니다.
주의이 레슨의 sql 은 H2 로 건수와 결과만 확인했고 속도와 공간은 측정하지 않았습니다. 삭제가 얼마나 빠른지, 공간이 얼마나 줄어드는지는 DB 와 환경에 따라 크게 다르므로 H2 숫자는 근거가 되지 않습니다. 공간 회수와 DB 별 문법은 설명과 문법 검토로만 다룹니다.