- DDL (Data Difinition Language): 모든 오브젝트(스키마)를 변경하거나 생성하는 쿼리
- 스키마를 변경하는 작업은 오랜 시간이 걸리고 DB 서버에 부하를 발생
11.7.1 온라인 DDL
- DDL 쿼리 수행 중, 다른 커넥션에서 해당 테이블을 변경하거나 조회하는 작업을 가능하게 해주는 기능
- ALTER TABLE 실행 시, 스키마 변경에 적합한 알고리즘을 찾는 과정 (알고리즘 선정 우선순위 내림차순)
- ALGORITHM=INSTANT 가 가능한지 확인 후, 가능하면 선정
- ALGORITHM=INPLACE 가 가능한지 확인 후, 가능하면 선정
- ALGORITHM=COPY 알고리즘 선택
- 알고리즘 우선순위가 낮을 수록, 스키마 변경을 위해 더 큰 잠금과 많은 작업을 필요로 함
- 알고리즘 종류
- INSTANT
- 데이터는 변경하지 않고, 메타 데이터만 변경하고 작업 완료
- 변경 중 읽기/쓰기는 대기
- 대신 변경 시간이 매우 짧음 (다른 커넥션 처리에 거의 영향 X)
- INPLACE
- 임시 테이블 카피는 발생하지 않고 스키마 변경을 실행
- 내부적으로 테이블 리빌드 할 수 있음 (대표적으로 프라이머리 키 추가, 칼럼 리네임은 X)
- 테이블 크기에 따라 많은 시간이 소요될 수 있음
- 변경 중 읽기/쓰기 가능, 시작/종료 시점에 잠깐 읽기/쓰기가 불가능
- 다른 커넥션 쿼리 처리에 영향도가 크지 않음
- COPY
- 변경 스키마를 적용한 임시테이블 생성 → 레코드 모두 임시 테이블 복사 → RENAME
- 변경 중 읽기만 가능, DML 불가 (DEFAULT LOCK=SHARED)
- 알고리즘 종류와 잠금을 쿼리에 명시 가능 (명시하지 않을 시 적절한 수준의 잠금 채택)
- 무조건 해당 알고리즘으로 처리되는 것은 아님
- 해당 알고리즘으로 처리될 수 없는 쿼리는 처리되지 않고 에러를 발생시킴
ALTER TABLE salaries CHANGE to_date end_date DATE NOT NULL
ALGORITHM=INPLACE, LOCK=NONE
- 알고리즘에 적용될 수 있는 잠금 종류
- ALGORITHM=INSTANT: 락 옵션 명시 불가
- ALGORITHM=INPLACE, COPY
- NONE
- SHARED: 읽기 잠금 (읽기 가능, DML 불가)
- EXCLUSIVE: 쓰기 잠금 (읽기/쓰기 불가)
- ddl online dll operations 문서를 참고해서 테이블 리빌드 하는지, 잠금은 무엇이 걸리는지, 온라인 ddl 이 가능한지 확인하자
INPLACE 알고리즘
- 테이블 리빌드하는 경우가 많음
- 테이블 리빌드 시 처리 순서
- INPLACE 스키마 변경을 지원하는 스토리지 엔진의 테이블인지 확인
- INPLACE 스키마 변경 준비 (온라인 DDL 처리되는 동안 데이터 변경 추적 준비)
- 테이블 스키마 변경 및 새로운 DML 로깅 (DML 대기 X, 별도의 로그로 기록)
- 로그 적용 (수집된 DML 로그를 테이블에 적용)
- INPLACE 스키마 변경 완료 (COMMIT)
- 2, 4 번 단계에서는 잠깐은 Exclusive 잠금이 필요