-
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 알고리즘으로 페이지를 압축하여 디스크 저장.
- 동작 과정:
- 디스크 페이지를 생성할 때 압축.
- **메모리(Buffer Pool)**에 올릴 때는 압축 해제(Uncompress).
- 디스크로 내릴 때 다시 압축.
- 디스크 사용량 절감.
- 읽기/쓰기 I/O 감소.
- CPU 자원 소모(압축/해제 과정).
🧠 동작 과정:
- 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)
- 단위: **데이터 레벨(행, 컬럼)**로 압축.
- 작동 방식: 반복 패턴을 찾아 압축(Run-Length Encoding, Huffman Coding 등).
- 사용 시점: TEXT, BLOB과 같은 가변 길이 데이터를 다룰 때.
- 큰 데이터셋에서 효과적.
- 데이터 전송량 및 디스크 사용량 절감.
- 압축률이 페이지 압축에 비해 낮을 수 있음.
3️⃣ 디스크 I/O 관점에서의 차이점
구분 페이지 압축 데이터 압축 단위 디스크 페이지(4KB/16KB) 행/컬럼 단위 압축 대상 페이지 전체 특정 컬럼 또는 필드 CPU 소모 페이지 읽기 시 높음 특정 필드 접근 시 I/O 효율성 페이지 캐싱으로 향상 데이터 전송 비용 절감 활용 사례 InnoDB 테이블 압축 TEXT/BLOB 컬럼 압축 🧩 정리
- 디스크 페이지는 디스크 I/O 단위로 MySQL에서 데이터를 읽고 쓰는 최소 단위.
- 페이지 압축은 페이지 단위로 압축하여 I/O 비용 절감에 효과적.
- 데이터 압축은 컬럼 데이터 단위로 압축하여 데이터 전송 비용을 줄음.
'DB' 카테고리의 다른 글
Mysql ACID 란? (0) 2025.02.16 MySQL 아키텍처 및 MySQL 쿼리 실행 알고리즘 (0) 2025.02.15 mysql의 인덱스(r-tree,b-tree, 전문검색, 함수기반, 멀티밸류, 클러스터링, 유니크) (0) 2025.02.15 MongoDB - Geo Index 에 대한 연구 (0) 2024.04.21 RDB VS NoSQL 2탄 (3) 2020.08.11