컴퓨터 구조
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) 강의 정리 내용입니다.
'🔍 CS > 데이터베이스' 카테고리의 다른 글
조회 최적화를 위한 인덱스 이해하기 - 03. 인덱스 자료구조 (0) | 2023.06.04 |
---|---|
조회 최적화를 위한 인덱스 이해하기 - 02. 인덱스 기본동작 (0) | 2023.06.04 |
SNS 모델링으로 배우는 정규화 / 비정규화 - 07. 실무에서의 정규화 비정규화에 대한 고민들 (0) | 2023.06.04 |
SNS 모델링으로 배우는 정규화 / 비정규화 - 01. 정규화 - 비정규화 핵심 이론 (0) | 2023.06.04 |
MySQL 소개 - 02. MySQL 아키텍처 소개 (0) | 2023.06.04 |