-
TABLE SWAP 개선: ALTER TABLE RENAME vs RENAME TABLEDatabase 2025. 9. 5. 20:56
TABLE SWAP 시 ALTER 대신 RENAME 을 사용하자
Overview
ETL 파이프라인에서는 새로운 데이터를 운영 테이블에 반영할 때, Zero-downtime(무중단)으로 테이블을 교체하는 전략이 필요합니다. 이를 위해 흔히 테이블 스왑(Table Swap) 방식을 사용합니다.
예를 들어, 기존 운영 테이블이
foo라면foo→foo_old(백업 보존)foo_new→foo(새로운 테이블로 교체)이렇게 이름을 교체하면 서비스는 중단 없이 새로운 데이터를 사용할 수 있고 동시에
foo_old로 이용해 빠른 롤백도 가능합니다.
테이블 이름 교체 방식
MySQL에서 테이블 이름을 교체할 수 있는 방법은 두 가지입니다.
-- ALTER 사용 ALTER TABLE ... RENAME TO -- RENAME 사용 RENAME TABLE ... TO ...foo테이블을 예로 들면
1) ALTER TABLE RENAME 방식ALTER TABLE foo RENAME TO foo_old; ALTER TABLE foo_new RENAME TO foo;
2) RENAME TABLE 방식RENAME TABLE foo TO foo_old, foo_new TO foo;
두 방식 모두 “이름 변경”을 하지만, 내부 동작/락/원자성에서 차이가 있습니다.
왜
ALTER보다RENAME이 유리한가?ALTER TABLE RENAME- 단일 테이블만 이름 변경 가능
- 실행할 때마다 메타데이터 락(MDL) 발생 (여러 번 실행 시 그만큼 락도 여러 번)
- 두 쿼리 사이에 중간 단계가 존재하여 경합·대기 가능성 증가
Mysql ALTER TABLE DOCUMENT
MySQL Docs: "An exclusive metadata lock on the table may be taken briefly during preparation and execution phases of the operation. Typically, concurrent DML is supported."-- 아래 쿼리는 불가능합니다. ALTER TABLE foo RENAME TO foo_old, foo_new RENAME TO foo;RENAME TABLE- 여러 테이블을 한 문장으로 이름 변경 가능
- 원자적(Atomic) 으로 처리되어 중간 상태가 없음
- 락 획득/해제 한 번으로 끝나 대기 및 경합 비용 감소
MySQL RENAME TABLE DOCUMENT
MySQL Docs: "RENAME TABLE, unlike ALTER TABLE, can rename multiple tables within a single statement"
즉, ETL의 TABLE SWAP처럼 테이블을 교체할 땐
RANAME TABLE이 락/원자성/성능 측면에서 더 이점이 있었습니다.
참고문헌
- https://dev.mysql.com/doc/refman/8.0/en/rename-table.html
- https://dev.mysql.com/doc/refman/8.0/en/alter-table.html
비슷한 경험이나 더 나은 방법이 있다면 댓글이나 메일로 공유해 주시면 감사하겠습니다!
'Database' 카테고리의 다른 글
MySQL 실험: 공간 인덱스 Optimizer 동작 분석 & 성능 실험 (0) 2025.09.04