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)
|
🧠 동작 과정:
- SELECT 문 실행 시 필요한 페이지를 Buffer Pool에 로딩.
- 랜덤 I/O로 여러 페이지를 가져와 정렬/필터링 수행.
- 순차 I/O로 연속된 페이지를 읽어 성능 최적화.
🧠 개념
- **디스크 페이지 단위(16KB)**로 데이터 압축.
- InnoDB는 zlib, LZ4와 같은 알고리즘 사용.
- 압축된 페이지는 **버퍼 풀(Buffer Pool)**에 압축 형태로 저장(버퍼 풀 내 압축 페이지와 일반 페이지로 구분).
⚙️ 동작 흐름
- 데이터 변경 시: InnoDB는 압축된 페이지와 비압축된 페이지를 함께 관리.
- 읽기/쓰기 I/O: 디스크 접근 시 압축된 페이지를 디스크에서 읽어 메모리에서 압축 해제.
- 버퍼 풀 정책: 자주 사용되는 페이지는 압축 및 비압축 형태로 유지하여 성능 유지.
2️⃣ 데이터 압축(Data Compression)
🧠 개념
- 테이블의 데이터 레벨에서 압축 수행.
- InnoDB 및 MyISAM 엔진 모두 지원.
- TEXT, BLOB, JSON과 같은 가변 길이 데이터에 효과적.
⚙️ 동작 흐름
- INSERT/UPDATE 시: **압축 알고리즘(zlib, LZ4)**을 사용하여 데이터 압축 후 디스크 저장.
- SELECT 시: 데이터 조회 시 메모리에서 압축 해제 후 반환.
- Large Object(LOB): 큰 데이터는 외부 페이지로 관리하며 필요 시 압축.
🔍 데이터 압축 (Data Compression)
|
3️⃣ 디스크 I/O 관점에서의 차이점
구분 | 페이지 압축 | 데이터 압축 |
단위 | 디스크 페이지(4KB/16KB) | 행/컬럼 단위 |
압축 대상 | 페이지 전체 | 특정 컬럼 또는 필드 |
CPU 소모 | 페이지 읽기 시 높음 | 특정 필드 접근 시 |
I/O 효율성 | 페이지 캐싱으로 향상 | 데이터 전송 비용 절감 |
활용 사례 | InnoDB 테이블 압축 | TEXT/BLOB 컬럼 압축 |
🧩 정리
- 디스크 페이지는 디스크 I/O 단위로 MySQL에서 데이터를 읽고 쓰는 최소 단위.
- 페이지 압축은 페이지 단위로 압축하여 I/O 비용 절감에 효과적.
- 데이터 압축은 컬럼 데이터 단위로 압축하여 데이터 전송 비용을 줄음.