MySQL 온라인 DDL이란?

elsa ❆·2023년 3월 12일

최근에 테이블에 인덱스를 추가할 일이 생겼는데, 문제가 발생했다. 개발한 기능 테스트 중 개발 환경에 있는 데이터들은 기존 테이블의 migration 해온 터라 약 47만 개가 있었다. MongoDB의 collection 형태의 데이터를 이번에 MySQL로 옮겼고, 테이블 생성시에 인덱스를 추가해두지 않았다. 그래서 새로운 인덱스를 추가하려고 하니 엄청나게 많은 시간이 걸리는 게 아닌가... 이런 적은 처음이라 당황했는데, 인덱스 추가를 좀 더 효율적으로 할 수 있는 방법이 있었다.

온라인 DDL

  • 즉각적인 테이블 변경과 동시에 일어나는 DML을 지원한다.
  • ALTER문 뒤에 ALGORITHM=INPLACE, LOCK=NONE을 추가하면 된다.
    • 예를 들면, 아래와 같이 사용한다.
      ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;

온라인 DDL 사용시 주의사항

  • 온라인 DDL 작업을 일시 중지하거나 온라인 DDL 작업의 I/O 또는 CPU 사용을 제한할 수는 없다.
  • 온라인 DDL 작업이 실패할 경우 롤백 비용이 많이 들 수 있다.
  • 온라인 DDL 작업을 오래 실행하면 replication 지연이 발생할 수 있다.

출처

profile
0과 1로 멋있는 결과를 내는 직업을 업으로 삼고 있습니다.

0개의 댓글