압축이 필요한 이유
└─ 페이지(16KB) 수를 줄여야 I/O가 줄고 쿼리가 빨라짐
방법 1. 페이지 압축
└─ OS 펀치 홀 이용 → 현실에서 쓰기 까다로움
방법 2. 테이블 압축 ← 실무에서 주로 이걸 씀
├─ KEY_BLOCK_SIZE로 목표 크기 설정
├─ 실패율 측정해서 적절한 SIZE 결정
└─ 버퍼 풀에서 압축/해제 버전 동시 관리
<aside> 🐰
압축은 공짜가 아니다. 디스크는 아끼는데, CPU를 쓰고 메모리도 더 쓴다. 그래서 무조건 쓰는 게 아니라 트레이드오프를 따져야 한다.
특히 KEY_BLOCK_SIZE를 너무 작게 잡으면, 압축 실패 → 페이지 스플릿 → 재압축 사이클이 반복되면서 쓰기 성능이 급격히 나빠질 수 있다. 그래서 꼭 실패율 측정 먼저 하고 적용하는 게 맞다.
버퍼 풀 이중 관리는 처음엔 낭비처럼 보이지만, 압축 버전을 보험으로 들고 있으면 메모리가 부족할 때 디스크까지 가지 않아도 되니까 결국 I/O를 한 번 더 아끼는 구조다..!
결국 압축이든 인덱스든 MySQL 튜닝의 핵심은 I/O를 얼마나 줄이냐인 것 같다.
</aside>