- 관계형 데이터베이스 조회 최적화2023년 04월 29일
- starryeye
- 작성자
- 2023.04.29.:58
컴퓨터 구조 시간에 배운 것을 떠올려 보자..
CPU가 데이터를 저장하거나 조회하기 위해서는 I/O Bus를 통해 동작되는 것을 떠올릴 수 있다.
그리고, CPU가 데이터를 저장하기 위해서는 메모리와 디스크를 이용한다.
메모리는 전원이 차단되면 휘발되기 때문에, 데이터의 영속성을 위해서는 결국 디스크에 저장 된다.
디스크는 메모리에 비해 굉장히 느리다는 것을 익히 알고 있다.
그래서..
데이터베이스 성능의 핵심은 결국 디스크 접근을 최소화 하는 것이다.
따라서, 메모리에 존재하는 데이터는 최대한 메모리로 끝내는게 좋다.
-> 캐시 히트율 UP
그러면 쓰기도 메모리에 쓰면 좋지 않을까..
메모리에 쓰면 데이터 유실이 생길 수 밖에 없는데..
그러기 위해서는 WAL(Write Ahead Log)를 사용한다.
CUD 요청에 따른 WAL에 대해 간단히 알아보자..
CUD 가 올 때마다 디스크에 접근하는 것은 너무 비효율적이다.
그래서 메모리를 이용하기로 했다. 메모리에 쌓아 놨다가 한번에 디스크에 보내보자!
그러면 메모리에 존재하는데 디스크에 없는 상황인데 DB가 죽으면?
이때 WAL 기술(순차 IO)을 도입해서 하나의 파일에 로그 형태로 남긴다.
그러면, 죽고 다시 살아나도 WAL을 실행시키면 정합성이 유지 된다.
여기서 의문이 생긴다.
WAL도 디스크에 저장하는 것 아니야?
-> 랜덤 IO / 순차 IO 의 차이가 있다.
순차 IO는 성능적으로 랜덤 IO 보다 좋다.
우리 DB는 보통 랜덤 IO가 발생한다. (사용자의 요청이 무작위로 발생되어 무작위 위치를 조회하게 됨)
하지만, WAL 은 로그를 파일에 쓰는 행위 이므로 파일 뒤에 순차적으로 쓰는 순차 IO이다.
그래서, 성능적으로 좋다.
그래서..
데이터베이스 성능의 핵심은 결국 디스크 접근(랜덤 IO)을 최소화 하는 것이다.
'DataBase > RDBMS' 카테고리의 다른 글
관계형 데이터베이스 조회와 쓰기 trade-off 1 (0) 2023.04.29 다음글이전글이전 글이 없습니다.댓글