14.7.1 테이블 압축의 개요
프로세서 및 캐시 메모리는 디스크 저장 장치보다 속도가 상승하고 있기 때문에 많은 워크로드가 디스크 바운드 됩니다. 데이터 압축 을 사용하면 데이터베이스의 크기가 작아지고, I / O가 감소 된 처리량이 향상되지만 CPU 사용률이 상승한다는 약간의 희생이 따릅니다. 압축은 자주 사용되는 데이터를 메모리에 유지하기 위해 충분한 RAM이 탑재 된 시스템에서 읽기 집약적 인 응용 프로그램을 실행할 때 특히 유용합니다.
ROW_FORMAT=COMPRESSED
로 작성된 InnoDB 테이블에서는 보통 16K 바이트의 기본값보다 작은 페이지 크기 를 디스크에서 사용할 수 있습니다. 페이지가 작을수록 디스크에서 읽은 I / O 및 디스크에 기록되는 I / O가 줄어들 기 때문에 SSD 장치를 사용할 때 특히 유용합니다.
페이지 크기는 KEY_BLOCK_SIZE
매개 변수를 사용하여 지정됩니다. 페이지 크기가 다른 경우, 테이블을 시스템 테이블 스페이스 내에 아니라 자신의 .ibd
파일에 저장해야합니다. 그러기 위해서는, innodb_file_per_table
옵션을 활성화해야합니다. 압축 레벨은 KEY_BLOCK_SIZE
의 값에 관계없이 동일합니다. KEY_BLOCK_SIZE
작은 값을 지정할수록 서서히 페이지가 작아진다는 I / O의 이점을 얻을 수 있습니다. 그러나 너무 작은 값을 지정하면 각 페이지에 여러 행을 수용 할만큼 충분히 데이터 값을 압축 할 수없는 경우, 페이지를 재구성하기위한 추가 오버 헤드가 발생합니다. 그 인덱스마다 키 컬럼의 길이에 따라 얼마나 작은 KEY_BLOCK_SIZE
을 테이블에 지정할 수 있는지에 대해 하드 제한이 부과되고 있습니다. 너무 작은 값을 지정하면 CREATE TABLE
또는 ALTER TABLE
문이 실패합니다.
버퍼 풀에 압축 된 데이터가 KEY_BLOCK_SIZE
의 값을 기준으로 페이지 크기가 작은 페이지로 유지됩니다. 컬럼 값을 추출하거나 업데이트하면 MySQL의 버퍼 풀에는 비 압축 데이터를 포함한 16K 바이트의 페이지도 만들어집니다. 버퍼 풀에서 비 압축 페이지에 업데이트가 동등한 압축 된 페이지에 다시 기록됩니다. 압축 된 페이지와 비 압축 페이지 모두 추가 데이터가 수용되도록 버퍼 페이지의 크기를 변경해야하는 경우도 있습니다. 그러나 압축되지 않은 페이지는 공간이 필요할 때 버퍼 풀에서 해방 된 다음 접속시에 다시 압축이 해제됩니다.