RealMySQL 1 : 6장 데이터 압축

일단 해볼게·2024년 10월 4일
0

book

목록 보기
16/18

페이지 압축

  • MySQL 서버가 디스크에 저장하는 시점에 데이터 페이지가 압축되어 저장
  • MySQL 서버가 디스크에서 데이터 페이지를 읽어올 때 압축 해제
  • 펀치 홀이라는 페이지 압축 기능 제공
    • 운영체제별로 특정 버전의 파일 세스템에서만 지원
    • 예시
      • 16KB 페이지를 7KB로 압축하면 9KB는 펀치 홀
      • 디스크의 9KB 펀치 홀을 운영체제로 반납
  • 문제
    • 하드웨어 자체에서도 해당 기능을 지원해야 사용 가능
    • 파일 시스템 관련 명령어(유틸리티)가 펀치 홀 지원하지 못한다.
      • 데이터 백업 및 복구하는 과정에서 데이터 복사 등 많은 유틸리티 사용
  • 실제 페이지 압축은 많이 사용되지 않는 상태

테이블 압축

  • 운영체제나 하드웨어에 대한 제약 없이 사용 가능
  • 문제
    • 버퍼 풀 공간 활용율 낮음
    • 쿼리 처리 성능 낮음
    • 빈번한 데이터 변경 시 압축률 떨어짐
  • 압축된 페이지 타깃의 크기는 2n (n은 2이상)으로만 설정 가능
    • 페이지 크기가 16KB라면 4, 8KB만 가능
    • 페이지 크기가 32, 64KB라면 테이블 압축 적용 불가능
  • 예시
    • 16KB 데이터 페이지 압축
      • 압축 결과가 8KB 이하면 그대로 디스크에 저장
      • 압축 결과가 8KB 초과하면 원본 페이지를 스플릿해서 2개의 페이지에 8KB씩 저장
    • 나뉜 페이지 각각에 대해 1번 압축 단계를 반복 실행
  • InnoDB I/O 레이어는 아무런 역할하지 않는다.
  • [중요] 압축 결과를 예측해서 KEY_BLOCK_SIZE를 결정

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

  • 압축된 페이지를 버퍼 풀에 적재하면 압축된 상태와 해제된 상태 2개 버전 관리
    • LRU 리스트, Unzip_LRU 리스트
  • 압축 및 압축 해제는 CPU를 상대적으로 많이 소모
profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글