14.11.9 온라인 DDL 제한
온라인 DDL 작업을 수행하는 경우 다음과 같은 제한을 고려하십시오.
테이블을 복사하는 온라인 DDL 조작 중에 파일은 임시 디렉토리 (Unix에서는
$TMPDIRWindows에서는%TEMP%또는--tmpdir구성 변수에 지정된 디렉토리)에 기록됩니다. 각 임시 파일은 새로운 테이블이나 인덱스에 하나의 열을 저장할 수있는 충분한 크기를 가지고 최종 테이블 또는 인덱스에 병합되면 즉시 삭제됩니다.모두 같은 인덱스를 지정하는
DROP INDEX및ADD INDEX절을 포함ALTER TABLE문은 고속 인덱싱이 아니라 테이블 복사본을 사용합니다.TEMPORARY TABLE에서 인덱스를 작성한 경우, 빠른 인덱싱이 사용되는 것이 아니라 테이블이 복사됩니다. 이것은 MySQL Bug # 39833로보고되고 있습니다.InnoDB는 외래 키에 필요한 인덱스를 사용자가 삭제하려고 할 때 오류 사례를 처리합니다. 오류
1553에 관련한 자세한 내용은 섹션 14.19.5 "InnoDB 오류 코드" 를 참조하십시오.ALTER TABLE어구LOCK=NONE테이블에ON...CASCADE또는ON...SET NULL제약이 존재하는 경우는 허용되지 않습니다.온라인 DDL 각
ALTER TABLE문 중에LOCK절에 관계없이 테이블에 대한 배타적 잠금 (LOCK=EXCLUSIVE절에 지정된 것과 같은 종류의 잠금)을 필요로하는 짧은 기간이 시작과 끝에 존재 합니다. 따라서 그 테이블에서 삽입, 업데이트, 삭제 또는SELECT ... FOR UPDATE를 실행하는 장기 실행 트랜잭션이 있으면 온라인 DDL 작업을 시작하기 전에 대기 할 수 있습니다. 또한ALTER TABLE의 진행중에 같은 장기 실행 트랜잭션이 시작된 경우 온라인 DDL 작업이 완료되기 전에 대기 할 수 있습니다.온라인
ALTER TABLE작업을 수행 할 때ALTER TABLE작업을 실행하는 스레드는 같은 테이블에 다른 연결 스레드에서 동시에 실행 된 DML 작업의 "온라인 로그"를 적용합니다. 이러한 DML 작업이 적용되면 중복 키 항목의 오류 (ERROR 1062 (23000) : 중복 된 항목)가 발생할 수 있습니다. 이것은 중복 된 항목이 임시뿐 "온라인 로그」의 나머지 분들의 항목에 의해 복구된다하더라도 동일합니다. 이것은 트랜잭션 동안 제약을 유지해야하는,InnoDB에 외부 키 제약 조건 검사의 생각을 닮아 있습니다.InnoDB테이블에 대한OPTIMIZE TABLE은 테이블을 재구성하여 인덱스 통계를 업데이트하고 클러스터 된 인덱스에서 사용되지 않는 공간을 확보하기위한ALTER TABLE조작에 맵됩니다. 5.6.17 이전에는이 작업에 대한 온라인 DDL 지원하지 않습니다. 기본 키에 나타나는 순서로 키가 삽입되기 때문에 보조 인덱스는 그만큼 효율적으로 생성되지 않습니다. 5.6.17 시점에서는InnoDB의 일반 테이블과 파티션 된 테이블을 재구성하기위한 온라인 DDL 지원을 추가하여OPTIMIZE TABLE이 지원됩니다. 자세한 내용은 섹션 14.11.1 "온라인 DDL 개요" 를 참조하십시오.MySQL 5.6 이전에 생성 된
InnoDB테이블은 임시 컬럼 (DATE,DATETIME또는TIMESTAMP)을 포함하고,ALTER TABLE ... ALGORITHM=COPY를 사용하여 재 구축되지 않은 테이블에 대한ALTER TABLE ... ALGORITHM=INPLACE를 지원하지 않습니다. 이 경우ALTER TABLE ... ALGORITHM=INPLACE조작에 의해 다음과 같은 오류가 반환됩니다.ERROR 1846 (0A000) : ALGORITHM = INPLACE is not supported. Reason : Can not change column type INPLACE. Try ALGORITHM = COPY.