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