MariaDB 버퍼 풀과 Redis에 메모리를 어떻게 나눠야 할까
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
읽기 중심 서비스에서 DB 캐시와 애플리케이션 캐시의 역할을 나눠 성능을 높이는 방법을 설명한다. 운영 단계에서 판단의 출발점은 ‘InnoDB Buffer Pool’입니다. 테이블과 인덱스 페이지를 메모리에 보관해 반복 디스크 읽기를 줄입니다. MariaDB 문서는 active data set의 상당 부분이 들어갈 수 있게 조정하되 swap이 생길 정도로 키우지 말라고 안내합니다.
이 글의 범위
실제 경험이나 측정 결과를 가정하지 않고, 공식 문서로 확인 가능한 개념과 적용 순서를 일반 가이드로 설명합니다. 제품 버전과 서비스 정책은 바뀔 수 있으므로 적용 전 연결된 공식 문서를 다시 확인하세요.
| MariaDB 버퍼 풀과 Redis에 메모리를 어떻게 나눠야 할까 핵심 판단 흐름 설명용 개념도 |
두 캐시가 해결하는 문제는 다르다
InnoDB Buffer Pool
테이블과 인덱스 페이지를 메모리에 보관해 반복 디스크 읽기를 줄입니다. MariaDB 문서는 active data set의 상당 부분이 들어갈 수 있게 조정하되 swap이 생길 정도로 키우지 말라고 안내합니다.
Redis
완성된 API 응답, 세션, 비싼 집계 결과처럼 애플리케이션이 명시적으로 정한 값을 저장합니다. TTL, 최대 메모리, eviction 정책을 함께 설계해야 합니다.
중복 캐시
DB에서 빠르게 읽을 수 있는 단순 행을 다시 Redis에 복사하면 무효화 비용만 늘 수 있습니다. 쿼리 비용과 변경 빈도를 기준으로 Redis 대상부터 줄입니다.
관측 지표
Innodb_buffer_pool_reads와 read_requests의 증가량, wait_free, Redis hits·misses, evicted_keys, used_memory를 같은 부하 구간에서 봅니다.
운영 여유
OS page cache, 연결 버퍼, 애플리케이션 heap, 백업·배치의 순간 메모리를 남겨야 합니다. 합계가 물리 RAM에 딱 맞으면 부하 순간 OOM이나 swap이 생길 수 있습니다.
도구보다 먼저 볼 기준
Buffer Pool은 InnoDB 페이지 캐시이고 Redis는 애플리케이션이 선택한 결과 캐시입니다. ‘InnoDB Buffer Pool’에서 시작해 ‘Redis’와의 경계를 정하면 구현할 범위와 실패했을 때 확인할 지점을 구분하기 쉬워집니다.
메모리 배분을 바꾸는 순서
- 현재 프로세스별 RSS와 swap, OOM 기록을 확인합니다.
- MariaDB와 Redis의 핵심 상태값을 정상 부하 시간에 일정 간격으로 수집합니다.
- DB 디스크 읽기가 많고 Redis 적중 가치가 낮다면 Buffer Pool을 우선 검토합니다.
- 비싼 집계가 반복되고 무효화 규칙이 명확하다면 Redis 대상과 TTL을 설계합니다.
- 한 번에 한 설정만 소폭 변경하고 최소 하루 이상의 같은 패턴에서 다시 측정합니다.
확인할 기본 상태값
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_wait_free';
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
# Redis CLI
INFO stats
INFO memory
변경 전 체크 포인트
| 확인 항목 | 질문 |
|---|---|
| 첫 기준: InnoDB Buffer Pool | 변경 전에 전제와 목적을 확인했는가? |
| 분리 대상: Redis | 다른 책임과 섞이지 않게 경계를 정했는가? |
| 피할 패턴: 총 RAM의 고정 비율을 모든 서버에 그대로 적용하기 | 본문에서 경고한 패턴이 남아 있지 않은가? |
| 오류와 복구 | 정상 경로뿐 아니라 실패와 되돌리기도 확인했는가? |
메모리 튜닝에서 피할 것
- 총 RAM의 고정 비율을 모든 서버에 그대로 적용하기
- 버퍼 풀과 Redis를 동시에 크게 늘려 OS 여유를 없애기
- 캐시 적중률만 보고 오래된 데이터와 무효화 오류를 무시하기
- 변경 직후 차가운 캐시 구간의 수치로 최종 결론내기
결론
Buffer Pool은 InnoDB 페이지 캐시이고 Redis는 애플리케이션이 선택한 결과 캐시입니다. 역할과 지표를 나누고 OS 여유를 남긴 상태에서 한 번에 하나씩 조정해야 빠르면서도 안정적인 메모리 배분을 찾을 수 있습니다.
댓글
댓글 쓰기