Real MySQL - (6) 순차 I/O, 랜덤 I/O

jj J·2023년 4월 24일
0

Database

목록 보기
6/6

인덱스를 살펴보기 전 해당 인덱스 장에서 자주 언급될 랜덤 I/O, 순차 I/O와 같은 디스크 읽기 방식을 먼저 간단히 알아보고 인덱스를 살펴보려한다.

컴퓨터의 CPU나 메모리처럼 전기적 특성을 띤 장치의 성능은 짧은 시간 동안 매우 빠른 속도로 발전했지만 디스크 같은 기계식 장치의 성능은 상당히 제한적으로 발전했다.
비록 최근에는 자기 디스크 원판에 의존하는 HDD보다 SSD가 많이 활용되고 있지만, 여전히 데이터 저장 매체는 컴퓨터에서 가장 느린 부분이라는 사실에는 변함이 없다.
데이터베이스나 쿼리 튜닝에 어느 정도 지식을 갖춘 사용자가 절감하고 있듯이 데이터베이스의 성능 튜닝은 어떻게 디스크 I/O를 줄이느냐가 관건일 때가 많다.

1. 디스크 읽기 방식

  • CPU나 메모리 같은 주요 장치는 대부분 전자식이지만, HDD는 기계식 장치. 그래서 DB 서버에서는 항상 디스크 장치가 병목이 된다
  • 이 점을 대체하기 위해 전자식 저장 매체인 SSD가 많이 출시되고 있다
  • SSD도 기존 HDD와 같은 인터페이스(SATA나 SAS)를 지원하므로 내장 디스크나 DAS 또는 SAN에 그대로 사용할 수 있다
  • SSD는 기존 HDD에서 데이터 저장용 플래터(원판)를 제거하고, 플래시 메모리를 장착하고 있다
  • 디스크 원판을 기계적으로 회전시킬 필요가 없으므로 아주 빨리 데이터를 읽고 쓸 수 있다
  • 플래시 메모리는 전원이 공급되지 않아도 데이터가 삭제되지 않는다
  • 메모리(DRAM)보다는 느리지만 HDD보다는 훨씬 빠르다
  • 디스크 헤더를 움직이지 않고 한 번에 많은 데이터를 읽는 순차 I/O에서는 SSD가 HDD보다 조금 빠르거나 비슷한 성능을 보이기도 한다
  • 하지만, 랜덤 I/O에서는 SSD가 HDD 대비 압도적으로 빠르다
  • 데이터베이스에서는 순차 I/O보다 랜덤 I/O 작업 비중이 대부분이므로, SSD의 장점은 DBMS용 스토리지에 최적이라고 할 수 있다

2. 랜덤 I/O와 순차 I/O

  • 랜덤 I/O는 HDD의 플래터(원판)를 돌려서 읽어야 할 데이터가 저장된 위치로 디스크 헤더를 이동시킨 다음 데이터를 읽는 것을 의미함
  • 사실 순차 I/O도 이러한 작업 과정은 동일하다
  • 그렇다면 랜덤 I/O와 순차 I/O는 어떤 차이가 있는 것일까?
  • 3개의 페이지를 순차 I/O, 랜덤 I/O로 기록한다고 가정해보자.
  • 순차 I/O의 경우 3개의 페이지를 디스크에 기록하기 위해 1번만 시스템 콜을 요청할 것이고
  • 랜덤 I/O의 경우 3번 시스템 콜을 요청할 것이다. 즉 디스크 헤드를 3번 움직여야할 것이다.
  • 디스크에 데이터를 읽고 쓰는데 걸리는 시간은 디스크 헤더를 움직여서 읽고 쓸 위치로 옮기는 단계에서 결정된다
  • 따라서, 순차 I/O 대비 랜덤 I/O 작업 부하가 훨씬 크다.
  • DB 대부분의 작업은 이런 작은 데이터를 빈번히 읽고 쓰기 때문에, MySQL에서는 그룹 커밋, 바이너리 로그 버퍼, InnoDB 로그 버퍼 기능을 내장하고 있다.
  • 디스크 원판이 없는 SSD에서도 여전히 랜덤 I/O는 순차 I/O보다 부하가 크다.
  • 쿼리를 튜닝한다는 것은 이러한 부하가 큰 랜덤 I/O를 줄여주는 것이 목적이라고 할 수 있다.
profile
매일 발전

0개의 댓글