[이렇게 사용하세요!] MySQL 8.0, 개발자를 위한 신규 기능 살펴보기! #5 SQL DDL

NAVER CLOUD PLATFORM
NAVER CLOUD PLATFORM
4 min readFeb 7, 2020

안녕하세요, 네이버 클라우드 플랫폼입니다.

지금까지 MySQL 신규 버전의 새로운 기능 ‘InnoDB’ ‘SQL DML’ ‘Indexes’ ‘JSON’을 차례대로 살펴보았습니다.

오늘은 ‘MySQL 8.0, 개발자를 위한 신규 기능 살펴보기’ 시리즈 마지막 포스팅으로 ‘SQL DDL’에 대해서 파헤쳐 보려고 합니다.

SQL DDL

DBA를 포함해 담당 개발자를 잠 못 들게 하는 몇 가지 DDL 작업과 관련해, 새로 추가된 알고리즘을 살펴보도록 하겠습니다.

MySQL 8.0에서는 몇 가지 DDL 작업에 대해 Instant라는 새로운 알고리즘이 추가되었습니다.

​이전 버전에서 사용된 Inplace 알고리즘의 경우 DDL 작업 중 일부는 내부적으로 테이블을 재구성하고 프로세스 시작과 종료 시 메타데이터에 lock을 획득해야 했습니다. 그래서 테이블 사이즈가 클수록 시간이 오래 걸렸을 뿐 만 아니라 DDL 작업 중에 수행되는 롱 트랜젝션을 항상 신경 써야 했습니다.

또, DDL 구문이 슬레이브 서버로 전달되어 작업이 완료될 때까지 변경된 데이터 반영을 대기해야 했기 때문에 복제 지연을 감수해야 했습니다.

새로운 Instant 알고리즘의 경우

- 테이블을 재구성하지 않고, DD(Data Dictionary)에서 메타데이터만 변경하는 방식으로 적용이 가능할 뿐만 아니라

- 메타데이터의 lock을 획득할 필요가 없기 때문에

이전 알고리즘에 비해 빠른 처리가 가능하게 되었습니다.

Instant 알고리즘으로 수행이 가능한 몇 가지 DDL을 살펴보면

- 인덱스 변경

- 테이블명 변경 (Alert 방식)

- 기본값 세팅/제거

- 컬럼 생성/변경

등이 있습니다.

각 DDL 구문에 알고리즘(ALGORITHM = INSTANT)을 명시하지 않더라도 MySQL 8.0에서는 기본 지원되는 사항이기 때문에 생략되어도 무방합니다.

여기까지 보면 수면권을 보장받을 수 있는 상당히 반가운 기능이긴 하지만, 새로운 알고리즘 적용과 관련된 제한 사항과 함께 발생 가능한 사이드 이펙트 역시 검토해주시는 것이 좋겠습니다.

앞선 설명과 같이 Instant 알고리즘은 테이블을 리빌드하지 않고, 메타데이터 변경으로 적용되는 방식이기 때문에 데이터 corruption을 fix 하기 어렵습니다. 다시 말해 MySQL 5.7에서는 DDL 작업을 통해 테이블 또는 인덱스 손상을 fix해 안정성을 확보할 수 있었지만, MySQL 8.0에서는 어렵게 되었습니다.

또한, Instant 알고리즘 방식의 컬럼 추가의 경우

- 테이블의 마지막에만 추가 가능하며

- 압축된 테이블은 적용할 수 없다는

등 몇 가지 한계를 미리 인지해주시면 좋을 것 같습니다.

글을 마무리하며…

지금까지 MySQL 신규 버전의 SQL DDL에 대해서 알아보았습니다. 어느새 이번 포스팅까지 총 다섯 번에 걸쳐서 ‘1. InnoDB’ ‘2. SQL DML’ ‘3. Indexes’ ‘4. JSON’ ‘5. SQL DDL’이라는 MySQL 8.0의 기능을 샅샅이 살펴보았습니다.

이 시리즈를 통해 많은 사용자들이 MySQL 8.0을 이용하는데 보다 큰 도움이 되었으면 좋겠습니다. 더 자세한 소식과 정보는 네이버 클라우드 플랫폼 공식 홈페이지를 통해서 살펴보실 수 있습니다. 관련해서 문의사항이 있다면 네이버 클라우드 플랫폼 고객지원을 이용하시면 신속한 해결이 가능합니다.

긴 시리즈의 글 읽어주셔서 감사드리며 더 유익한 글로 찾아뵙겠습니다.

--

--

NAVER CLOUD PLATFORM
NAVER CLOUD PLATFORM

We provide cloud-based information technology services for industry leaders from startups to enterprises.