MySQL 성능 최적화 작업 중 하나로 DISK I/O를 줄이는 방법중 하나

파일 포멧을 Barracuda로 설정

Barracuda 이전의 파일 포멧은 Antelope에는 Row 포멧이 'Compact'만 제공되었으나,

Barracuda 파일 포멧에서는 'Compact'이외에 'Dynamic','Compressed'이 추가됨.(기본은 '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를 최적화 할 수 있는 장점이 있다.

 

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 tblTest_compressed
(
  id int(11) NOT NULL AUTO_INCREMENT,
  aa int(11) DEFAULT NULL,
  bb varchar(100)  DEFAULT NULL,
  PRIMARY KEY (id)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
 

참고

http://jason-heo.github.io/mysql/2014/03/05/innodb-barracuda.html

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=seuis398&logNo=70094098699


to Top