Skip to main content

# 데이터 압축

  • MySQL 서버에서 디스크에 저장된 데이터 파일의 크기는 쿼리의 처리 성능 및 백업, 복구 시간과도 밀접하게 연결되기 때문에, 데이터 압축 기능을 제공한다.
  • 테이블 압축과 페이지 압축이 존재.

6.1 페이지 압축

  • 디스크에 저장하는 시점에 데이터 페이지가 압축되어 저장되고, 데이터 페이지를 읽어올 때 압축이 해제된다.
  • 압축한 결과가 용량이 얼마나 될지 예측이 불가능한데 하나의 테이블은 동일한 크기의 페이지로 통일되야하는 문제점이 존재한다.
  • 이를 해결하기 위해 펀치 홀이라는 기능을 사용하여 남은 공간에 대해 펀치홀을 생성하면 파일 시스템은 빈 공간을 운영체제로 다시 반납.
  • 하지만 펀치 홀 기능은 운영체제뿐만 아니라 하드웨어 자체에서도 해당 기능을 지원해야 사용가능하다는 단점이 존재한다. 또 파일 시스템 관련 명령어가 펀치 홀을 지원하지 못해서 cp와 같이 압축된 파일을 복사하거나 하면 펀치 홀이 다시 채워져서 원본 크기가 되버릴 수 있다. 책에서는 페이지 압축에 대해서는 자세히 언급하지 않는다.
  • 테이블을 생성하거나 변경할 때 COMPRESSION 옵션을 설정하여 이용할 수 있다.

6.2 테이블 압축

  • 테이블 압축은 운영체제나 하드웨어에 대한 제약 없이 사용할 수 있기 때문에 일반적으로 더 활용도가 높다.
  • 하지만 몇 가지 단점 존재.
    1. 버퍼 풀 공간 활용률이 낮음.
    2. 쿼리 처리 성능이 낮음.
    3. 빈번한 데이터 변경 시 압축률이 떨어짐.

Step 1. 압축 테이블을 생성

Step 2. KEY_BLOCK_SIZE 결정

Step 3. 압축된 페이지의 버퍼 풀 적재 및 적용

Step 4. 테이블 압축 관련 설정