14.7.2 테이블 압축 사용
압축 테이블을 작성하기 전에 innodb_file_per_table
구성 옵션이 활성화되어 있는지, 그리고 innodb_file_format
이 Barracuda
로 설정되어 있는지 확인하십시오. 이러한 매개 변수는 MySQL 구성 파일 my.cnf
또는 my.ini
에서 설정하거나 MySQL 서버를 종료하지 않고 SET
문을 사용하여 설정할 수도 있습니다.
테이블의 압축을 사용하려면 CREATE TABLE
또는 ALTER TABLE
문에서 ROW_FORMAT=COMPRESSED
절 KEY_BLOCK_SIZE
절 또는 둘 모두를 사용합니다.
압축 테이블을 만들려면 다음과 같은 명령문을 사용하는 것이 좋습니다.
SET GLOBAL innodb_file_per_table = 1; SET GLOBAL innodb_file_format = Barracuda; CREATE TABLE t1 (c1 INT PRIMARY KEY) ROW_FORMAT = COMPRESSED KEY_BLOCK_SIZE = 8;
ROW_FORMAT=COMPRESSED
을 지정하는 경우KEY_BLOCK_SIZE
를 생략 할 수 있습니다.innodb_page_size
값의 절반 인 기본 페이지 크기 값이 사용됩니다.KEY_BLOCK_SIZE
을 지정하는 경우ROW_FORMAT=COMPRESSED
를 생략 할 수 있습니다. 압축이 자동으로 활성화됩니다.KEY_BLOCK_SIZE
의 최적 값을 결정하려면 일반적으로이 조항에 다양한 값을 지정한 동일한 테이블의 복사본을 만든 후 다음 결과로 생성되는.ibd
파일의 크기를 측정하고 현실 같은 워크로드 에서 각 동작의 성능을 확인합니다.KEY_BLOCK_SIZE
값은 팁으로 처리됩니다.InnoDB
는 필요에 따라 다른 크기를 사용 할 수 있습니다. 값 0은innodb_page_size
값의 절반 인 디폴트의 압축 된 페이지 크기를 나타냅니다.KEY_BLOCK_SIZE
은innodb_page_size
값 이하로 밖에 할 수 없습니다.innodb_page_size
값보다 큰 값을 지정한 경우에는 지정된 값이 무시되고 경고가 발행됩니다. 또한KEY_BLOCK_SIZE
는innodb_page_size
값의 절반으로 설정됩니다.innodb_strict_mode=ON
의 경우 잘못된KEY_BLOCK_SIZE
값을 지정하면 오류가 반환됩니다.성능 관련 추가 구성 옵션에 대해서는 섹션 14.7.3 "InnoDB 테이블의 압축 조정" 을 참조하십시오.
InnoDB
데이터 페이지 의 기본 압축 크기는 16K 바이트입니다. 옵션 값의 조합에 따라 MySQL에서 테이블의 .ibd
파일에 대응 한 1K 바이트, 2K 바이트, 4K 바이트, 8K 바이트 또는 16K 바이트의 페이지 크기가 사용됩니다. 실제 압축 알고리즘은 KEY_BLOCK_SIZE
값의 영향을받지 않습니다. 이 값은 각 압축 된 청크의 크기가 결정되기 때문에 각 압축 된 페이지에 넣다 수있는 행 수에 영향을받습니다.
일반적으로 KEY_BLOCK_SIZE
을 InnoDB
의 페이지 크기 에 동일하게 설정해도 대량의 압축은 발생하지 않습니다. 예를 들어, InnoDB
의 페이지 크기 는 16K 바이트이기 때문에 일반적으로 KEY_BLOCK_SIZE=16
을 설정해도 대량의 압축은 발생하지 않습니다. 대부분의 경우 이러한 값에 제대로 압축되므로이 설정은 오랜 BLOB
, VARCHAR
, 또는 TEXT
컬럼을 가진 테이블에 계속 도움이 될 수 있습니다. 따라서 섹션 14.7.5 "InnoDB 테이블에서의 압축 동작" 에서 설명한 바와 같이, 필요한 오버 플로우 페이지 가 줄어들 가능성도 있습니다.
테이블의 모든 인덱스 ( 클러스터 된 인덱스 포함)은 CREATE TABLE
또는 ALTER TABLE
문에서 지정된 것과 동일한 페이지 크기를 사용하여 압축됩니다. ROW_FORMAT
과 KEY_BLOCK_SIZE
같은 테이블 속성은 InnoDB
테이블의 CREATE INDEX
구문의 일부가 아니므로 지정해도 무시됩니다 (단, SHOW CREATE TABLE
문 출력에 표시됩니다).
압축 테이블 제약
버전 5.1 이전의 MySQL에서는 압축 테이블을 처리 할 수 없기 때문에 압축을 사용하려면 우연히 호환성 문제가 발생하는 것을 방지하기 위해 innodb_file_format=Barracuda
구성 매개 변수를 지정해야합니다.
테이블의 압축은 InnoDB의 시스템 테이블 공간 에서도 사용할 수 없습니다. 시스템 테이블 스페이스 (공간 0, ibdata*
파일)에는 사용자 데이터를 포함 할 수 있지만 내부 시스템 정보도 포함되어 있기 때문에 압축되지 않습니다. 따라서 압축은 자신의 테이블 공간에 저장되는 테이블 (및 인덱스)에만 적용됩니다. 즉, innodb_file_per_table
옵션이 활성화되어있는 상태에서 생성됩니다.
절 이름이 ROW_FORMAT
임에도 불구하고 압축은 별도의 줄에 아니라 전체 테이블과 연관된 모든 인덱스에 적용됩니다.