본문 바로가기
CS/데이터베이스

조회 최적화를 위한 인덱스 이해하기 - 01. 데이터베이스 성능 핵심

by 컴쏘 2023. 6. 4.
728x90

컴퓨터 구조

CPU가 디스크나 네트워크 카드 등에 접근을 하기 위해서는 I/O 버스를 거쳐야 함

데이터를 저장하기 위한 용도 → 메모리, 디스크

메모리 vs 디스크

  • 메모리
    • 속도 : 빠름
    • 영속성 : 전원이 공급되지 않으면 휘발
    • 가격 : 비쌈
  • 디스크
    • 속도 : 느림
    • 영속성 : 영속성이 있음
    • 가격 : 저렴함

데이터베이스의 데이터는 결국 디스크에 저장됨 하지만, 디스크는 메모리에 비해 훨씬 느리다. → 데이터베이스 성능의 핵심은 디스크 I/O(접근)을 최소화 하는 것

디스크 접근은 어떻게 줄일 수 있을까?

  • 메모리에 올라온 데이터로 최대한 요청을 처리하는 것 → 메모리 캐시 히트율을 높이는 것
  • 심지어 쓰기도 곧바로 디스크에 쓰지 않고 메모리에 쓴다. → 메모리에 데이터 유실을 고려해 WAL(Write Ahead Log)를 사용

랜덤 I/O vs 순차 I/O

디스크의 접근은 2가지가 있음

랜덤 I/O : 블록은 랜덤하게 읽음

순차 I/O : 연속된 블록을 읽음

대부분의 트랜잭션은 무작위하게 write가 발생 → 이를 그대로 디스크에 반영을 하면 랜덤 I/O가 발생 → 이를 지연시켜 랜덤 I/O 횟수를 줄이는 대신 순차적 I/O를 발생시켜 정합성 유지

  • 하나의 파일에 끝부분부터 순차적으로 write를 하는 것 (update 아님) → 이렇게 쌓는 것은 랜덤 I/O 보다 순차적 I/O 가 많이 발생
  • 만약 데이터가 디스크까지 가지 못하고 죽어버린다면 데이터 유실은?
    • WAL이라는 기술이 도입됨
    • 이 기술을 사용하면 파일에 순차적으로 실행한 로그가 남기 때문
    • 만약, 메모리에 있던 데이터가 디스크까지 않고 유실이 되더라도 파일의 히스토리에 있음 → 서버가 다시 뜰 때 파일에 순차적으로 쌓아뒀던 로그를 다시 재실행 → 디스크에 있는 원본 데이터와 같아져 데이터의 정합성을 유지할 수 있음

정리

결국 데이터베이스 성능의 핵심은 디스크의 랜덤 I/O(접근)을 최소화 하는 것


2023 KAKAO Tech Campus_BackEnd 필수 과정
DB(MySQL) 강의 정리 내용입니다.
728x90