Loading...
MySQL 9.5 Reference Manual 9.5의 17.12.6 Simplifying DDL Statements with Online DDL의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
online DDL가 도입되기 전에는, 많은 DDL 작업을 하나의 ALTER TABLE 구문으로 결합하는 것이 일반적인 관행이었다. 각 ALTER TABLE 구문이 테이블을 복사하고 재구축하는 작업을 수반했기 때문에, 동일한 테이블에 대해 여러 변경을 한 번에 수행하는 것이 더 효율적이었는데, 이는 그 모든 변경을 테이블에 대한 단 한 번의 재빌드 작업으로 처리할 수 있었기 때문이다.
단점은, DDL 작업이 포함된 SQL 코드를 유지 관리하거나 서로 다른 스크립트에서 재사용하기가 더 어려웠다는 점이다. 구체적인 변경 사항이 매번 다르다면, 약간씩 다른 각 상황마다 새로운 복잡한 ALTER TABLE을 작성해야 할 수도 있었다.
online으로 수행할 수 있는 DDL 작업의 경우, 효율성을 희생하지 않고도 이를 개별 ALTER TABLE 구문으로 분리하여 스크립트 작성과 유지 관리를 더 쉽게 할 수 있다. 예를 들어, 다음과 같이 복잡한 구문을:
1ALTER TABLE t1 ADD INDEX i1(c1), ADD UNIQUE INDEX i2(c2), 2 CHANGE c4_old_name c4_new_name INTEGER UNSIGNED;
다음과 같이 더 단순한 부분들로 나누어 각각 독립적으로 테스트하고 수행할 수 있다:
1ALTER TABLE t1 ADD INDEX i1(c1); 2ALTER TABLE t1 ADD UNIQUE INDEX i2(c2); 3ALTER TABLE t1 CHANGE c4_old_name c4_new_name INTEGER UNSIGNED NOT NULL;
다음과 같은 경우에는 여전히 멀티파트 ALTER TABLE 구문을 사용할 수 있다:
특정 순서대로 수행되어야 하는 작업의 경우. 예를 들어, 인덱스를 생성한 다음 그 인덱스를 사용하는 foreign key 제약 조건을 생성하는 경우.
동일한 특정 LOCK 절을 사용하는 작업들을 하나의 그룹으로, 모두 성공하거나 모두 실패하도록 하고 싶은 경우.
online으로 수행할 수 없는 작업, 즉 여전히 테이블 복사 방법을 사용하는 작업.
ALGORITHM=COPY 또는
old_alter_table=1을 지정하여, 특수한 상황에서의 정밀한 이전 버전 호환성을 위해 필요하다면 테이블 복사 동작을 강제하는 경우.
17.12.5 Configuring Parallel Threads for Online DDL Operations
17.12.7 Online DDL Failure Conditions