8.1 디스크 읽기 방식

2024년 3월 23일 작성

Real MySQL

디스크 읽기 방식 - 랜덤 I/O와 Sequential I/O 인덱스에만 한정된 용어는 아니지만, 인덱스를 논하면서 자주 나오는 개념이기 때문에 간단히 알아보자.

8.1.1 Hard Disk Drive (HDD)와 Solid State Drive (SSD)

HDD는 기계식 장치이기 때문에 데이터베이스 서버에서는 항상 디스크 장치가 병목이 된다. 이러한 기계식 HDD를 대체하기 위해 전자식 저장매체, SSD가 많이 출시되고 있다.

쉽게 설명된 글있어서 첨부 https://aws.amazon.com/ko/compare/the-difference-between-ssd-hard-drive/

  • SSD는 플레시 메모리를 사용 원판 회전 X -> 속도 빠름
  • 플래시 메모리 -> 전원 공급없어도 데이터 삭제X
  • 메모리보단 느림, HDD보다 빠름

240323-232104

Sequential I/O: 디스크의 헤더를 움직이지 않고 한번에 많은 데이터를 읽는 것 Sequential I/O에서는 SSD가 HDD 보다 조금 빠르거나 비슷.

SSD의 장점은 기존 HDD 보다 Random I/O가 훨씬 빠르다는 것임!

그런데, DB 서버에서는 Sequential보다 Random한 I/O가 훨씬 많음. 따라서 DBMS에서 SSD를 사용하는 것이 스토리지에 최적.

Random I/O Benchmark

240323-232440

TPS이다. (초당 트랜잭션 수) 저자가 실행한 테스트라 실제 프로젝트 적용 시 결과와 상이할 수 있음.

8.1.2 Random I/O와 Sequential I/O

Random I/O란

원래 이 표현은 HDD의 플래터를 돌려서, 읽어야 할 데이터가 저장된 위치로 헤더를 이동시킨 다음 데이터를 읽는 것을 의미. 그런데 Sequential I/O라고 해서 다를 것은 없다. 그럼 어떤 차이가 있는지 알아보자.

240323-233056

  • 3개의 페이지 쓰기 요청을 위해 Sequential 은 시스템콜을 1번 요청.
  • Random은 3번 시스템콜을 요청

디스크의 I/O 지연시간은 디스크 헤더를 움직여서 읽고 쓸 위치로 옮기는 시간과 동일하다. 따라서 위의 그림의 경우 Sequential I/O가 Random보다 3배 정도 빠르다.

따라서, 디스크의 성능은 헤더를 얼마나 적게 움직이느냐에 의해 결정된다.

문제는, 데이터베이스 대부분의 작업은 여러번 쓰기/읽기를 요청하는 Random I/O 이기 때문에 디스크에 부하가 많이 걸린다. 따라서 MySQL 서버는 그룹커밋(한번에 반영)이나 바이너리로그 버퍼 / InnoDB 버퍼풀 등의 기능을 가지게 된것도 있다.


지금까지는 원판이 있는 HDD 얘기였지만 SSD라고 해서 다르지 않다. SSD 에서도 random io는 Sequential io보다 전체 throughput이 좋지 않다.

쿼리 튜닝 - 디스크 성능의 관점

디스크 성능 관점에서 쿼리를 튜닝하는 것은 random io를 Sequential io로 바꾸는 것이 아니다.

일반적으로는 쿼리를 튜닝은 순차 io를 만드는 게 아니라, 랜덤 io 자체를 줄여주는 방향으로 이뤄진다. 즉, 꼭 필요한 데이터만을 읽도록 쿼리를 개선하는 것이다.