Mysql/MySQL 아키텍처 심층 분석
InnoDB Buffer Pool 내부 구조 (Chunk, Instance 분리 등)
DEVLIB
2025. 4. 18. 15:46
728x90
InnoDB Buffer Pool 내부 구조 심층 분석
InnoDB Buffer Pool은 InnoDB 스토리지 엔진의
"메모리 기반 캐시 시스템" 입니다.
디스크 I/O를 줄여 성능을 극대화하는 데 핵심 역할을 합니다.
MySQL 5.5 이후로는 멀티 인스턴스 분할이 지원되었고,
5.7 이후에는 Chunk 기반 동적 리사이징까지 가능해졌습니다.
1. InnoDB Buffer Pool 기본 개념
- 역할: 디스크에 저장된 테이블 데이터와 인덱스(Primary + Secondary Index)를 메모리에 적재하여 빠르게 접근
- 구성:
- 테이블/인덱스 데이터 Page(16KB 단위)
- Undo 데이터
- Adaptive Hash Index (AHI)
- Insert Buffer (Change Buffer)
- Doublewrite Buffer (일부)
기본 동작
1. 필요한 데이터 Page 요청
2. Buffer Pool에 있으면 메모리에서 즉시 제공 (Buffer Pool Hit)
3. 없으면 디스크에서 읽어오고, Buffer Pool에 적재 (Buffer Pool Miss)
2. Buffer Pool 내부 구성 요소
구성요소 | 설명 |
Free List | 사용 가능한 빈 페이지 리스트 |
Flush List | 디스크에 쓰기 예약된 Dirty 페이지 리스트 |
LRU List | 가장 최근 사용/미사용 페이지 리스트 |
Hash Table | 페이지를 빠르게 찾기 위한 해시 매핑 |
3. Buffer Pool Instance 분리
MySQL 5.5 이상: Buffer Pool을 여러 Instance로 분할 가능
이유
- 단일 Buffer Pool에서는 LRU 관리나 Page 접근 시 락(Contention) 이슈 발생
- 대규모 시스템에서는 멀티 코어 CPU를 더 잘 활용해야 함
설정 방법
innodb_buffer_pool_instances = 8
- Buffer Pool을 8개로 나눔
- 각 인스턴스는 독립적인 LRU, Free List, Flush List를 가짐
- 자동으로 innodb_buffer_pool_size를 innodb_buffer_pool_instances 수만큼 나누어 균등 할당
추천 설정
메모리 크기 | 추천 인스턴스 수 |
1GB 이하 | 1 |
1GB~4GB | 2~4 |
4GB 이상 | 8 이상 (상황에 따라 최대 64까지) |
4. Buffer Pool Chunk 구조
MySQL 5.7 이상: Buffer Pool을 Chunk 단위로 관리하여 동적 리사이징 가능
Chunk란?
- Buffer Pool 메모리 공간을 "Chunk" 단위로 나눈 것
- 한 Chunk에는 여러 Page와 여러 Instance가 할당될 수 있음
- Chunk는 메모리 증가/감소 시 분리/병합 가능
관련 파라미터
innodb_buffer_pool_chunk_size
- 기본값: 128MB
- Chunk 단위로 Buffer Pool 크기를 조정
동작 예시
Buffer Pool 총 8GB
Chunk Size 128MB → 약 64 Chunk
→ 필요시 Chunk 단위로 리사이즈 가능 (MySQL이 서버 재시작 없이 리사이즈 처리)
5. 전체 구조 요약
nnoDB Buffer Pool
├── Instance 1
│ ├── Free List
│ ├── Flush List
│ └── LRU List
│
├── Instance 2
│ ├── Free List
│ ├── Flush List
│ └── LRU List
│
...
└── Instance N
├── Free List
├── Flush List
└── LRU List
(Chunk 단위로 메모리 리사이징 관리)
운영/튜닝 실전 Tips
항목 | 실전 전략 |
Buffer Pool Size | 서버 메모리의 70~80% 설정 권장 |
Buffer Pool Instance 수 | 락 경합 줄이려면 메모리 1GB당 1~2개 설정 |
Chunk Size | 너무 작으면 Chunk Overhead, 너무 크면 유연성 저하 |
메모리 모니터링 | SHOW ENGINE INNODB STATUS, INFORMATION_SCHEMA.INNODB_BUFFER_POOL_STATS 활용 |
관련 주요 파라미터 정리
변수명 | 설명 |
innodb_buffer_pool_size | 전체 Buffer Pool 크기 (MB 또는 GB 단위) |
innodb_buffer_pool_instances | Buffer Pool 분리 개수 |
innodb_buffer_pool_chunk_size | Chunk 크기 (MB 단위) |
innodb_flush_neighbors | Flush 시 인접 페이지 묶어서 저장 여부 |
LIST