RealMySQL - 데이터 압축

흑이·2023년 3월 15일
0

데이터 압축


페이지 압축

  • 하나의 테이블은 동일한 크기의 페이지(블록)로 통일 돼야 한다.
  • 페이지 압축 기능은 운영체제별로 특정 버전의 파일 시스템에서만 지원되는 펀치 홀 이라는 기능을 사용한다.
  • 페이지 압축 이용하기 위해 테이블 생성하거나 변경할 때 COMPRESSION 옵션을 설정
    CREATE TABLE t1 (c1 INT) COMPRESSION="zlib";

테이블 압축

  • 운영체제나 하드웨어에 대한 제약 없이 사용할 수 있다.
  • 테이블 압축 단점
    • 버퍼 풀 공간 활용률이 낮음
    • 쿼리 처리 성능이 낮음
    • 빈번한 데이터 변경 시 압축률이 떨어짐

압축 테이블 생성

  • 원본 데이터 페이지의 압축 결과가 목표 크기(KEY_BLOCK_SIZE) 보다 작서나 같을 때까지 반복해서 페이지를 스플릿 하는 것이다.

KEY_BLOCK_SIZE 결정

  • 압축된 결과가 어느 정도가 될지 예측해서 KE_BLOCK_SIZE를 결정하는게 중요

  • 압축 실패율이 높다고 해서 압축을 사용하지 말아야 한다는 것을 의미 하지 않음

  • INSERT만 되는 로그 테이블의 경우 한 번 INSERT되면 이후 다시는 변경되지 않아 실패해서 스플릿 후 재압축 한다고 하더라도 전체적으로 데이터 파일의 크기가 큰 폭으로 줄어든다면 손해는 아니다.

  • 반대로 압축 실패율이 높지 않은 경우 테이블의 데이터가 빈번하게 조회되고 변경된다면 압축은 고려하지 않는 것이 좋다.


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

  • 압축된 테이블과 압축되지 않은 테이블이 공존, 압축이 적용된 페이지, 적용되지 않은 페이지 모두 가질 수 있다.

  • 메모리 낭비 및 CPU 소모를 줄이기 위해 다음과 같은 처리 수행

  • 버퍼풀의 공간이 필요한 경우에는 LRU 리스트에서 원본 데이터 페이지(압축된 형태)는 유지하고, Unzip_LRU 리스트에서 압축 해제된 버전은 제거해서 버퍼 풀의 공간을 확보한다.

  • 압축된 데이터 페이지가 자주 사용되는 경우에는 Unzip_LRU 리스트에 압축 해제된 페이지를 계속 유지하면서 압축 및 압축 해제 작업을 최소화한다.

0개의 댓글