14.11.9 온라인 DDL 제한
온라인 DDL 작업을 수행하는 경우 다음과 같은 제한을 고려하십시오.
테이블을 복사하는 온라인 DDL 조작 중에 파일은 임시 디렉토리 (Unix에서는
$TMPDIR
Windows에서는%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.