목록 보기
Memory DB는 무엇으로 가득 차 있었을까 - 1부 : 클라이언트 캐싱과 tracking item
백엔드

Memory DB는 무엇으로 가득 차 있었을까 - 1부 : 클라이언트 캐싱과 tracking item

버즈빌
버즈빌
2026년 9월 5일

두줄요약

MemoryDB 메모리 급증의 원인을 Redis 클라이언트 캐싱 tracking item 누적으로 분석했습니다. 존재하지 않는 유령 키 조회가 TTL 없이 기록을 쌓는 구조를 확인했습니다.

문제 상황

  • AWS MemoryDB Primary 메모리 사용률 85%, 여유 공간 500MB 미만
  • Primary 2.63GB와 Replica 0.96GB의 비대칭 메모리 사용량

원인 분석

  • 실데이터 165MB와 달리 Primary에 8B·24B 객체 약 2GB 누적
  • tracking_total_items와 객체 수의 일치로 클라이언트 캐싱 Tracking Table 식별
  • 연결 종료 후에도 tracking item을 지연 삭제하는 Redis 설계와 빈 키 조회의 결합

구조와 흐름

  • 클라이언트 캐싱 시 (키 × 연결) 단위 tracking item을 Radix Tree에 기록
  • 키 변경·삭제·TTL 만료 시 해당 키의 tracking item 회수 및 무효화 전송
  • 존재하지 않는 키도 캐싱 무효화 대상이므로 Tracking Table 기록 대상

주의할 점

  • TTL이 있는 키라도 존재하지 않는 유령 키 조회 기록은 만료 이벤트 부재로 지속 누적
  • w:KR- 유령 키 강제 무효화로 수십만 tracking item과 약 18MB 회수 확인
  • 읽기 대상 Replica 전환 후 tracking item 누적 위치만 Primary에서 Replica로 이동

다음 읽기

#MemoryDB 주제를 이어서 읽기

Memory DB는 무엇으로 가득 차 있었을까 - 2부 : BCAST 전환과 Failover

유령 키로 누적되는 MemoryDB OPTIN tracking item 문제를 BCAST 전환으로 구조적으로 차단했습니다.\n리허설 후 failover를 두 차례 수행해 7,684만 개 항목과 메모리 사용률을 정상화했습니다.

버즈빌
버즈빌
백엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...