InnoDB 스토리지 엔진은 REDUNDANT, COMPACT, DYNAMIC, COMPRESSED의 네가지 Row 형식을 지원한다. 

REDUNDANT

- 이전 버전의 MySQL 과의 호환됨

  기존의 File Format Antelope 과 5.0 이후에 추가된 Barracuda 도 지원

- 가변 길이 컬럼값의 768 바이트까지는 B-Tree 노드의 인덱스에 저장하고 나머지는 Overflow Page에 저장한다. 

- 768 바이트보다 크거나 같은 고정길이 컬럼은 가변 길이 컬럼으로 인코딩되어 Off-Page 에 저장할 수 있다. 

- 컬럼값이 768 바이트 이하이면 Overflow Page를 사용하지 않고 값이 B-Tree 노드에 저장되어 I/O가 약간 절약될 수 있다. 이경우 상대적으로 짧은 BLOB 컬럼값에 적합 하지만 B-Tree 노드가 키 값이 아닌 데이터로 채워져 효율성이 떨어질 수 있다. 

- BLOB 컬럼이 많은 테이블은 B-Tree 노드가 너무 다득차고 너무 적은 행를 포함하여 행이 더 짧거나 컬럼 값이 off-page에 저장된 경우보다 전체 인덱스의 효율성이 떨어질 수 있다.

  

 

COMPACT

- 이전 버전의 MySQL 과의 호환됨

  기존의 File Format Antelope 과 5.0 이후에 추가된 Barracuda 도 지원

- COMPACT 은 일부 작업에 CPU 사용을 늘리는 대신 REDUNDANT 에 비해 행 저장 공간을 약 20% 줄여준다.

- 워크로드가 캐시 적중률과 디스크 속도에 의해 제한되는 일반적인 작업인 경우 COMPACT 가 더 빠를 수 있다.

  워크로드가 CPU 속도에 의해 제한되는 경우 COMPACT 이 느려질 수 있다.

- COMPACT 을 사용하는 테이블은 B 트리 노드 내의 인덱스 레코드에 처음 768바이트의 가변 길이 컬럼 값(VARCHAR, VARBINARY 및 BLOB 및 TEXT 형식)을 저장하고 나머지는 Overflow Page에 저장된다.

  768바이트보다 크거나 같을 수록 고정 길이 컬럼은 페이지 밖에서 저장할 수 있는 가변 길이 컬럼으로 인코딩된다.

  예를 들어, CHAR(255) 컬럼은 utf8mb4와 마찬가지로 문자 세트의 최대 바이트 길이가 3보다 큰 경우 768바이트를 초과할 수 있다. 

- 컬럼 값이 768바이트 이하인 경우 Overflow Page가 사용되지 않으며 값이 B-tree 노드에 완전히 저장되므로 I/O에서 일부 절감이 발생할 수 있다. 이는 비교적 짧은 BLOB 컬럼 값에 적합하지만 B-트리 노드가 키 값이 아닌 데이터로 채워지므로 효율성이 저하될 수 있다. BLOB 컬럼이 많은 테이블은 B-tree 노드가 너무 가득 차있고 Row가 너무 적어져 Row가 짧거나 컬럼 값이 페이지 밖에서 저장된 경우보다 전체 인덱스의 효율성이 떨어질 수 있다. 

 

 

DYNAMIC

- DYNAMIC Row Format 은 COMPACT Row Format과 동일한 저장소 특성을 제공하지만 긴 가변 길이 컬럼에 대한 향상된 스토리지 기능을 추가하고 큰 인덱스 키 접두사를 지원한다.
- Barracuda File Format은  DYNAMIC Row Format을 지원한다. 

 

- ROW_FORMAT=DYNAMIC로 테이블이 만들어지면 InnoDB는 Overflow Page에 20바이트 포인터만 포함하는 클러스터된 인덱스 레코드를 사용하여 긴 가변 길이 컬럼 값(VARCHAR, VARBINARY 및 BLOB 및 TEXT 형식의 경우)을 완전히 Off-Page 로 저장할 수 있다. 768바이트보다 크거나 같을 수 있는 고정 길이 필드는 가변 길이 필드로 인코딩된다. 예를 들어, CHAR(255) 컬럼은 utf8mb4와 마찬가지로 문자 세트의 최대 바이트 길이가 3보다 큰 경우 768바이트를 초과할 수 있다.
- 컬럼이 페이지 밖에서 저장되는지 여부는 페이지 크기와 Row의 총 크기에 따라 다릅니다. Row가 너무 길면 클러스터드 인덱스 레코드가 B 트리 페이지에 맞을 때까지 페이지 밖에서 가장 긴 열이 선택된다. 40바이트 미만이거나 동일한 텍스트 및 BLOB 컬럼은 Line에 저장된다. 

- DYNAMIC Row Format 은 COMPACT,  REDUNDANT Format과 마찬가지로 인덱스 노드에 전체 Row를 저장하는 효율성을 유지하지만 DYNAMIC Row Format은 많은 수의 데이터 바이트의 데이터 바이트로 B-트리 노드를 채우는 문제를 방지한다. DYNAMIC Row Format은 긴 데이터 값의 일부가 페이지 밖에서 저장되는 경우 일반적으로 전체 값을 페이지 밖에서 저장하는 것이 가장 효율적이라는 생각을 기반으로 한다. DYNAMIC Format을 사용하면 짧은 컬럼이 B 트리 노드에 남아 있는 경우 지정된 Row에 필요한 Overflow Page 수를 최소화할 수 있다.

- DYNAMIC Row Format은 인덱스 키 접두사를 최대 3072바이트까지 지원한다. 이 기능은 기본적으로 활성화되는 innodb_large_prefix 변수에 의해 제어된다.

- DYNAMIC Row Foramt을 사용하는 테이블은 시스템 테이블스페이스, 테이블당 파일 테이블 스페이스 및 일반 테이블스페이스에 저장할 수 있다. 시스템 테이블 스페이스에 DYNAMIC 테이블을 저장하려면 innodb_file_per_table 사용하지 않도록 설정하고 테이블 만들기 또는 테이블 변경 문을 사용하거나 테이블 만들기 또는 테이블 변경과 함께 테이블스페이스 [=] innodb_system 테이블 옵션을 사용한다. innodb_file_per_table 및 innodb_file_format 변수는 일반 테이블스페이스에 적용되지 않으며, 테이블스페이스 [=] innodb_system 테이블 옵션을 사용하여 시스템 테이블스페이스에 DYNAMIC 테이블을 저장할 때는 적용할 수 없다.

 

 

COMPRESSED 

- COMPRESSED Rwo Format은 DYNAMIC 과 동일한 저장소 특성 및 기능을 제공하지만 테이블 및 인덱스 데이터 압축에 대한 지원을 추가한다.

- Barracuda File Format은  COMPRESSED Row Format을 지원한다. 

- COMPRESSED Rwo Format은 테이블 및 인덱스 데이터의 추가 저장소 및 성능 고려 사항이 압축되고 더 작은 페이지 크기를 사용하여 DYNAMIC Row Foramt 과 유사한 내부 세부 정보를 사용한다. COMPRESSED Rwo Format을 사용하면 KEY_BLOCK_SIZE 옵션으로 클러스터된 인덱스에 저장된 컬럼 데이터의 양과 Overflow Page에 배치되는 양을 제어한다. 

- COMPRESSED  Row Format은 인덱스 키 접두사를 최대 3072바이트까지 지원한다. 이 기능은 기본적으로 활성화되는 innodb_large_prefix 변수에 의해 제어된다.

- COMPRESSED  Row Format을 사용하는 테이블은 테이블당 파일 테이블 스페이스 또는 일반 테이블 스페이스에서 만들 수 있다. 시스템 테이블 스페이스는 압축행 형식을 지원하지 않는다. 압축테이블을 테이블당 파일 테이블에 저장하려면 innodb_file_per_table 변수를 사용하도록 설정해야 하며 innodb_file_format을 Barracuda 로 설정해야 한다. innodb_file_per_table 및 innodb_file_format 변수는 일반 테이블 스페이스에 적용되지 않는다. 일반 테이블 스페이스는 압축 및 압축되지 않은 테이블이 서로 다른 물리적 페이지 크기로 인해 동일한 일반 테이블 스페이스에 공존할 수 없는 주의 사항으로 모든 Row Format 을 지원한다. 

 

참고 

https://dev.mysql.com/doc/refman/5.7/en/innodb-row-format.html

'MySQL' 카테고리의 다른 글

GTID를 사용한 복제구성  (0) 2021.06.09
GTID  (0) 2021.06.09
online ddl 알고리즘  (0) 2021.05.27
binlog format  (0) 2021.05.15
인덱스 최대 크기  (0) 2021.05.13

+ Recent posts