본문 바로가기

Technique/Database

InnoDB의 새로운 파일 포맷 "Barracuda"

반응형

InnoDB Plugin에서는 Barracuda라는 새로운 파일 포맷을 지원한다.
사실 MySQL 5.0 버전까지는 파일 포맷에 대한 이름이 없었는데, Barracuda가 등장하면서 이전 버전의 파일 포맷은 Antelope로 이름이 지어졌다.
Antelope 파일 포맷에서는 "Compact" Row 포맷을 사용했었지만, Barracuda 파일 포맷에서는 "Compact" 이외에 "Dynamic", "Compressed" Row 포맷이 새롭게 추가되었다. (기본값은 "Compact")

Row 포맷에 따라 가변 길이 컬럼(VARCHAR, TEXT, BLOB)의 처리와 압축 기능 사용이 결정된다.
InnoDB에서는 VARCHAR, TEXT, BLOB을 완전히 동일한 타입으로 인식하고 처리하는 점 참고하자.

Compact

 가변 길이 컬럼의 767 byte 까지만 B-Tree에 저장하고, 나머지는 Off-Page에 저장

Dynamic

 Page 사이즈와, Row 사이즈를 고려하여, 길이가 긴 컬럼들은 전체를 Off-Page에 저장하되, B-Tree에는 20 byte의 포인터만 저장

Compressed

 Dynamic과 거의 유사하지만 KEY_BLOCK_SIZE 옵션을 통해 16KB의 데이터 Page를 압축 가능

 (KEY_BLOCK_SIZE = 1, 2, 4, 8, 16 기본값 : 8)
 KEY_BLOCK_SIZE = 16인 경우 기본적으로 데이터 Page를 압축하지 않지만, VARCHAR, TEXT, BLOB 컬럼만 선택적으로 압축


기존 Compact Row 포맷에서 VARCHAR, TEXT, BLOB 컬럼을 많이 포함하고 있는 테이블의 경우, 데이터 Page가 VARCHAR, TEXT, BLOB 데이터들로 채워져서, Page 내 의미있는 데이터의 밀도가 낮아지고 Range 스캔시 읽어야 할 Page가 많아져 성능 저하를 일으키는 문제가 있었다. 
하지만 Barracuda 파일 포맷에서는 이런 테이블들을 선택적으로 Dynamic 또는 Compressed로 변경해서 I/O를 최적화 할 수 있는 장점이 있다.
 
Barracuda 파일 포맷을 사용하기 위해서는 built-in InnoDB가 아닌 Plugin InnoDB가 활성화되어 있어야 하며, my.cnf에서 아래와 같이 설정을 추가해 주면 된다.

innodb_file_per_table

innodb_file_format=barracuda


동적으로 MySQL 서버 설정을 변경할 수도 있다.

SET GLOBAL innodb_file_format=barracuda;
SET GLOBAL innodb_file_per_table=ON;


테이블 생성(CREATE TABLE) 혹은 변경(ALTER TABLE)하는 경우 ROW_FORMAT, KEY_BLOCK_SIZE를 옵션으로 줄 수 있다.

mysql> ALTER TABLE tb_test ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
...


반응형

'Technique > Database' 카테고리의 다른 글

[ORACLE] Dual  (0) 2020.05.04
MySQL SHOW 명령모음  (0) 2019.03.08
[ORACLE] 사용자 권한 확인, 수정, 삭제  (0) 2019.02.14
[MySQL] Sequence 생성  (0) 2019.02.01