ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MySQL 데이터 압축
    DB 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. 데이터 압축컬럼 데이터 단위로 압축하여 데이터 전송 비용을 줄음.
Designed by Tistory.