DB

MySQL 데이터 압축

Lee_SJ 2025. 2. 15. 18:27

MySQL에서 데이터 압축은 디스크 공간 절약I/O 성능 향상을 위해 데이터 페이지나 테이블 데이터를 압축 알고리즘을 통해 줄이는 기술입니다. MySQL은 InnoDB 스토리지 엔진을 기반으로 다음과 같은 방식으로 데이터를 압축합니다

 

📦 MySQL 데이터 압축 구조

1️⃣ 페이지 압축(Page Compression)

1-1.디스크 페이지(Disk Page)란?

디스크 페이지디스크 I/O 단위로, MySQL데이터를 페이지 단위로 디스크에 읽고 쓴다.

  • 일반 크기: 4KB, 8KB, 16KB(InnoDB 기본은 16KB).
  • 페이지 구성 요소:
    • 헤더(Header): 페이지 타입, 페이지 번호 등 메타정보.
    • 데이터(Data): **행(row)**들이 저장됨.
    • 트레일러(Trailer): 체크섬 및 페이지 무결성 검사용.

 📜 페이지 압축 (Page Compression)

  • 단위: 디스크 페이지 단위로 압축 수행.
  • 작동 방식: InnoDB zlib 또는 lz4 알고리즘으로 페이지를 압축하여 디스크 저장.
  • 동작 과정:
    1. 디스크 페이지를 생성할 때 압축.
    2. **메모리(Buffer Pool)**에 올릴 때는 압축 해제(Uncompress).
    3. 디스크로 내릴 때 다시 압축.
     장점:
  • 디스크 사용량 절감.
  • 읽기/쓰기 I/O 감소.
     단점:
  • CPU 자원 소모(압축/해제 과정).

🧠 동작 과정:

  1. SELECT 문 실행 시 필요한 페이지Buffer Pool에 로딩.
  2. 랜덤 I/O로 여러 페이지를 가져와 정렬/필터링 수행.
  3. 순차 I/O로 연속된 페이지를 읽어 성능 최적화.

🧠 개념

  • **디스크 페이지 단위(16KB)**로 데이터 압축.
  • InnoDBzlib, LZ4와 같은 알고리즘 사용.
  • 압축된 페이지는 **버퍼 풀(Buffer Pool)**에 압축 형태로 저장(버퍼 풀 내 압축 페이지일반 페이지로 구분).

⚙️ 동작 흐름

  1. 데이터 변경 시: InnoDB는 압축된 페이지비압축된 페이지를 함께 관리.
  2. 읽기/쓰기 I/O: 디스크 접근 시 압축된 페이지를 디스크에서 읽어 메모리에서 압축 해제.
  3. 버퍼 풀 정책: 자주 사용되는 페이지는 압축 및 비압축 형태로 유지하여 성능 유지.

2️⃣ 데이터 압축(Data Compression)

🧠 개념

  • 테이블의 데이터 레벨에서 압축 수행.
  • InnoDBMyISAM 엔진 모두 지원.
  • TEXT, BLOB, JSON과 같은 가변 길이 데이터에 효과적.

⚙️ 동작 흐름

  1. INSERT/UPDATE 시: **압축 알고리즘(zlib, LZ4)**을 사용하여 데이터 압축 후 디스크 저장.
  2. SELECT 시: 데이터 조회 시 메모리에서 압축 해제 후 반환.
  3. Large Object(LOB): 큰 데이터는 외부 페이지로 관리하며 필요 시 압축.
🔍 데이터 압축 (Data Compression)
  • 단위: **데이터 레벨(행, 컬럼)**로 압축.
  • 작동 방식: 반복 패턴을 찾아 압축(Run-Length Encoding, Huffman Coding 등).
  • 사용 시점: TEXT, BLOB과 같은 가변 길이 데이터를 다룰 때.
장점:
  • 큰 데이터셋에서 효과적.
  • 데이터 전송량  디스크 사용량 절감.
단점:
  • 압축률이 페이지 압축에 비해 낮을 수 있음.

 

3️⃣ 디스크 I/O 관점에서의 차이점

구분 페이지 압축 데이터 압축
단위 디스크 페이지(4KB/16KB) 행/컬럼 단위
압축 대상 페이지 전체 특정 컬럼 또는 필드
CPU 소모 페이지 읽기 시 높음 특정 필드 접근 시
I/O 효율성 페이지 캐싱으로 향상 데이터 전송 비용 절감
활용 사례 InnoDB 테이블 압축 TEXT/BLOB 컬럼 압축

 

🧩 정리

  1. 디스크 페이지디스크 I/O 단위로 MySQL에서 데이터를 읽고 쓰는 최소 단위.
  2. 페이지 압축페이지 단위로 압축하여 I/O 비용 절감에 효과적.
  3. 데이터 압축컬럼 데이터 단위로 압축하여 데이터 전송 비용을 줄음.