ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TABLE SWAP 개선: ALTER TABLE RENAME vs RENAME TABLE
    Database 2025. 9. 5. 20:56
    TABLE SWAP 시 ALTER 대신 RENAME 을 사용하자

    Overview

    ETL 파이프라인에서는 새로운 데이터를 운영 테이블에 반영할 때, Zero-downtime(무중단)으로 테이블을 교체하는 전략이 필요합니다. 이를 위해 흔히 테이블 스왑(Table Swap) 방식을 사용합니다.
     

    예를 들어, 기존 운영 테이블이 foo라면

    foofoo_old (백업 보존)

    foo_newfoo (새로운 테이블로 교체)

     

    이렇게 이름을 교체하면 서비스는 중단 없이 새로운 데이터를 사용할 수 있고 동시에 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이 락/원자성/성능 측면에서 더 이점이 있었습니다.

     


    참고문헌

    비슷한 경험이나 더 나은 방법이 있다면 댓글이나 메일로 공유해 주시면 감사하겠습니다!

     

Designed by Tistory.