데이터베이스

[Redis vs MySQL] DB Buffer Pool이 있음에도 Redis가 훨씬 빠른 기술적 이유

PSW 2025. 12. 23. 17:01

의문의시작

  • 보통 조회 속도를 높이기 위해서 Redis를 도입한다고 배운다.
  • MySQL 공부를 하다 보니 MySQL의 InnoDB에는 Buffer pool이라는 메모리 캐싱 영역이 있다는것을 알게 되었고,
  • "만약 DB Buffer Pool Hit Ratio가 100%라면(모든 데이터가 메모리에 있다면), Disk I/O가 없는데 굳이 Redis를 쓸 필요가 없는 것 아닐까? 왜 Redis가 구조적으로 더 빠를 수밖에 없을까?"

자료구조의 차이

  • MySQL(B+Tree)
    • DB는 데이터를 찾기 위해 B+Tree 구조를 탐색한다.
    • 메모리에 있어도 Root -> Branch -> Leaf 페이지로 이동하는 논리적 비용이 발생
    • 시간 복잡도 O(log N)
  • Redis(Hash Table)
    • Key-Value 구조로, Key를 해싱하면 바로 메모리 주소로 접근한다.
    • 시간 복잡도: O(1)

CPU 오버헤드의 차이

  • MySQL:

    • SQL 문이 들어오면 Parser가 문법을 검사하고, Optimizer가 실행 계획을 세운 뒤, Executor가 실행한다.
    • 단순 조회(SELECT)라도 이 복잡한 과정을 거쳐야 하므로 CPU 사이클을 많이 소모한다.
  • Redis:

    • 단순한 명령어(GET, SET) 기반이다.
    • SQL 파싱이나 실행 계획 수립 과정 없이, 소켓에서 명령을 읽어 바로 메모리에 접근한다.

동시성 제어의 복잡도

  • MySQL (ACID & MVCC):
    • 데이터의 무결성을 지키기 위해 너무 많은 일을 한다.
    • 트랜잭션 격리 수준을 따져야 하고, Undo Log를 확인해 이전 버전 데이터를 보여줘야 할 수도 있고(MVCC), Lock을 걸어야 할 수도 있다.
  • Redis:
    • 기본적으로 싱글 스레드모델을 사용하여 복잡한 레코드 잠금(Record Lock)이나 트랜잭션 격리 계산 비용을 최소화했다.

'데이터베이스' 카테고리의 다른 글

JPA 성능 최적화  (4) 2025.02.25
Sharding  (0) 2025.01.08