[MySQL] DDL

kwang-sub·2024년 11월 26일

MySQL 8.0

목록 보기
14/14

DDL은 DBMS의 모든 오브젝트를 생성하거나 변경하는 쿼리를 의미하며 서버에 상당한 부하를 시키는 작업들이 있으니 주의해야한다.

온라인 DDL

이전에는 테이블 구조가 변경되는 경우 다른 커넥션에서 해당 테이블을 조회할 수 없었지만 이를 가능하게 하는것이 온라인 DDL이다.

alter table 테이블명 옵션  ALGORITHM=알고리즘, LOCK=

위와 같이 적용할 수 있는데 DDL이 실행되는 동안 다른 트랜잭션에 대해서 어떻게 처리 될 수 있는지 설정할 수 있다.

ALOGRITHM, LOCK 옵션

INSTANT
테이블의 데이터는 전혀 변경하지 않고 메타 데이터만 변경한다. 다른 트랜잭션의 읽기,쓰기는 모두 대기 상태지만 빠른 시간안에 작업 종료된다.

INPLACE
임시 테이블로 복사하지 않고 스키마 변경되며 테이블 리빌드 될 수 있으며 작업시간이 오래 걸릴 수 있다.
다른 트랜잭션의 읽기, 쓰기 모두 가능하지만 작업 최초시작시점,종료시점은 불가능하다. 다만 불가능한 시점은 찰나의 순간이다.

COPY
변경된 스키마를 적용한 임시 테이블을 생성하고 완료 후 RENAME하는 방식
다른 트랜잭션의 읽기는 가능하고 쓰기는 불가능하다.

MySQL 서버는 ALTER TABLE 명령 실행시 ALOGRITHM 옵션을 명시하지 않으면 INSTANT -> INPLACE -> COPY 순으로 실행 가능한 옵션인지 확인하고 가능하면 선택해서 실행한다.

LOCK 옵션
NONE, SHARED(읽기 잠금), EXCLUSIVE(읽기, 쓰기 잠금)가 있다는 정도만 알아두자.

profile
백엔드 개발일지

0개의 댓글