TIL

6.2 테이블 압축

6.2.1 압축 테이블 생성

SET GLOBAL innodb_file_per_table=ON;

CREATE TABLE compressed_table (
	c1 INT PRIMARY KEY
)
ROW_FORMAT=COMPRESSED
KEY_BLOCK_SIZE=8;

-- // KEY_BLOCK_SIZE만 명시해도 적용된다.

테이블 압축 과정

6.2.2 KEY_BLOCK_SIZE 결정

설정 예시

-- // 인덱스별로 압축 실행 횟수와 성공 횟수를 기록하기 위해
SET GLOBAL innodb_cmp_per_index_enalbed=ON;

INSERT INTO employees_comp4k SELECT * FROM employees;

-- // 인덱스별로 압축 횟수, 성공 횟수, 실패율 조회
SELECT 
	table_name, index_name, compress_ops, compress_ops_ok, 
	(compress_ops-compress_ops_ok)/compress_ops * 100 as compression_failure_pct
FROM information_schema.INNODB_CMP_INDEX;
table_name index_name compress_ops compress_ops_ok compression_failure_pct
employees_comp4k PRIMARY 18635 13478 27.6737
employees_comp4k ix_firstname 8320 7653 8.0168
employees_comp4k ix_hiredate 7766 6721 134561
table_name index_name compress_ops compress_ops_ok compression_failure_pct
employees_comp8k PRIMARY 8092 6593 18.5245
employees_comp8k ix_firstname 1996 1996 0.0000
employees_comp8k ix_hiredate 1391 1381 0.7189

압축 실패율이 높다고 해서 압축을 사용하지 말아야 한다는 것은 아니다. 삽입만 되는 테이블일 경우 (로그 파일) 스프릿 후 재압축이 빈번해도 전체적으로 데이터 파일 크기가 줄어든다면 이득이다. 하지만 빈번히 조회되고 수정되는 테이블에서는 압축이 CPU 자원을 많이 소모하기 때문에 압축을 고려하지 않는 것이 좋다.

6.2.3 압축된 페이지의 버퍼 풀 적재 및 사용

6.2.4 테이블 압축 관련 설정