[MySQL][InnoDB] InnoDB 제한사항

에서는 InnoDB 테이블, 인덱스, 테이블 스페이스 InnoDB 스토리지 엔진의 다른 측면에 대한 제한 사항에 대해 설명합니다.

+ 테이블은 최대 1017 개의 컬럼을 포함 있습니다 (MySQL 5.6.9에서 초기 제한 1000에서 발생). 가상 생성 컬럼이 제한에 포함됩니다.

 

+ 테이블은 최대 64 개의 보조(secondary) 인덱스를 포함 있습니다.

 

+ innodb_large_prefix 활성화 경우(기본값) 인덱스키에 정의된 제한은 DYNAMIC 또는 COMPRESSED 형식을 사용하는 InnoDB 테이블에 대해 3072바이트입니다. innodb_large_prefix 비활성화하면 모든 형식의 테이블에 대해 인덱스키에 정의된 제한이 767 바이트입니다.

 

innodb_large_prefix 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. innodb_large_prefix 정의된 인덱스키 지원하지 않는 이전 버전의 InnoDB와의 호환성을 위하여 정의된 인덱스 키를 비활성화하기 위해 MySQL 5.5에서 도입되었습니다.

 

REDUNDANT 또는 COMPACT 형식을 사용하는 InnoDB 테이블의 경우 인덱스키 길이 제한은 767 바이트입니다. 예를 들어, TEXT 또는 VARCHAR 열에서 utf8mb3 문자 세트와 문자에 대해 최대 3바이트를 가정하면 255 이상의 컬럼 색인으로 한계에 도달 있습니다.

 

제한을 초과하는 인덱스 접두사 길이를 사용하려고하면 오류가 반환됩니다. 복제 구성에서 이러한 오류를 피하려면 슬레이브에서 활성화 수없는 경우 마스터에서 innodb_large_prefix 활성화하면 안됩니다.

 

MySQL 인스턴스를 만들 innodb_page_size 옵션을 지정하여 InnoDB 페이지 크기를 8KB 또는 4KB 줄이면 16KB 페이지 크기에 대한 3072 바이트 제한에 따라 인덱스 키의 최대 길이가 비례 적으로 줄어 듭니다. , 페이지 크기가 8KB 경우 최대 인덱스 길이는 1536 바이트이고 페이지 크기가 4KB 경우 768 바이트입니다.

 

인덱스키 크기에 적용되는 제한은 전체 컬럼 인덱스키에도 적용됩니다.

 

+ 다중 컬럼 인덱스에는 최대 16 개의 컬럼이 허용됩니다. 한계를 초과하면 오류가 반환됩니다.

ERROR 1070 (42000): Too many key parts specified; max 16 parts allowed

 

+ 페이지 외부에 저장된 가변 길이 컬럼을 제외한 최대 크기는 페이지 크기가 4KB, 8KB, 16KB 32KB 경우 페이지의 절반보다 약간 작습니다. 예를 들어, 기본 innodb_page_size 16KB 최대 크기는 8000바이트입니다. 그러나 InnoDB 페이지 크기가 64KB 경우 최대 크기는 16000바이트입니다. LONGBLOB LONGTEXT 열은 4GB보다 작아야하며 BLOB TEXT 컬럼을 포함한 크기는 4GB보다 작아야 합니다.

행이 페이지 길이의 절반 미만이면 모든 행이 페이지 내에 로컬로 저장됩니다. 페이지가 절반을 초과하면 행이 페이지의 절반에 맞을 때까지 외부 오프 페이지 스토리지에 가변 길이 컬럼이 선택됩니다.

 

+ InnoDB 내부적으로 65,535 바이트보다 크기를 지원하지만 MySQL 자체는 모든 컬럼의 결합 크기에 대해 65,535 크기 제한을 부과합니다.

 

+ 일부 구형 운영 체제에서는 파일 크기가 2GB보다 작아야합니다. 이것은 InnoDB 제한이 아닙니다. 시스템 테이블 스페이스가 필요한 경우 하나의 데이터 파일이 아닌 여러 개의 작은 데이터 파일을 사용하여 테이블 스페이스를 구성하거나 테이블당 파일 일반 테이블 스페이스 데이터 파일에 테이블 데이터를 분배하십시오.

 

+ InnoDB 로그 파일의 최대 결합 크기는 512GB입니다.

 

+ 최소 테이블 스페이스 크기가 10MB보다 약간 큽니다. 최대 테이블 스페이스 크기는 InnoDB 페이지 크기에 따라 다릅니다.

 

 

Table 14.25 InnoDB 최대 테이블 스페이스 크기

InnoDB 페이지 크기

최대 테이블 스페이스 크기

4KB

16TB

8KB

32TB

16KB

64TB

32KB

128TB

64KB

256TB

 

최대 테이블 스페이스 크기는 테이블의 최대 크기이기도 합니다.

+ Windows 32 비트 시스템에서 테이블 스페이스 파일은 4GB 초과 없습니다.

 

+ 파일 이름을 포함한 테이블 스페이스 파일의 경로는 Windows에서 MAX_PATH 제한을 초과 없습니다. Windows 10 이전에는 MAX_PATH 제한이 260자입니다. Windows 10 버전 1607부터 MAX_PATH 제한은 일반적인 Win32 파일 디렉토리 기능에서 제거되었지만 동작을 활성화해야 합니다.

 

바라쿠다 파일 형식에서 + ROW_FORMAT = COMPRESSED 페이지 크기가 최대 16KB이고 14 비트 포인터를 사용한다고 가정합니다.

 

+ 내부 InnoDB 열의 이름 (DB_ROW_ID, DB_TRX_ID DB_ROLL_PTR 포함) 일치하는 컬럼 이름으로 테이블을 만들 없습니다. 제한은 모든 대소문자를 가리지 않고 적용됩니다.

mysql> CREATE TABLE t1 (c1 INT, db_row_id INT) ENGINE=INNODB;

ERROR 1166 (42000): Incorrect column name 'db_row_id'

 

+ SHOW TABLE STATUS 테이블이 예약 물리적 크기를 제외하고 InnoDB 테이블에 대한 정확한 통계를 제공하지 않습니다. 수는 SQL 최적화에 사용 대략적인 추정치입니다.

 

+ 동시 트랜잭션이 동시에 다른 수의 행을 "" 있으므로 InnoDB 테이블에 내부 수를 유지하지 않습니다. 결과적으로 SELECT COUNT (*) 문은 현재 트랜잭션에 보이는 행만 계산합니다.

 

+ ROW_FORMAT = COMPRESSED 16KB보다 페이지 크기에서는 지원되지 않습니다.

 

+ 특정 InnoDB 페이지 크기 (innodb_page_size) 사용하는 MySQL 인스턴스는 다른 페이지 크기를 사용하는 인스턴스의 데이터 파일 또는 로그 파일을 사용할 없습니다.

 

+ 전송 가능한 테이블 스페이스 기능을 사용하여 테이블 가져 오기와 관련된 제한 사항은 테이블 가져 오기 제한 사항을 참조하십시오. (InnoDB 통계수집 설정 링크)

 

+ 온라인 DDL 관련된 제한 사항은 14.13.6 온라인 DDL 제한 사항 참조하십시오(InnoDB 온라인 DDL 링크)

 

+ 일반 테이블 스페이스와 관련된 제한 사항은 일반 테이블 스페이스 제한 사항을 참조하십시오. (InnoDB 테이블스페이스 링크)

댓글(0)

Designed by JB FACTORY