[데이터베이스] 순차 I/O와 랜덤 I/O

Yoon Uk·2023년 8월 7일
1

데이터베이스

목록 보기
11/19

디스크의 순차 I/O와 랜덤 I/O

순차 I/O랜덤 I/O는 데이터를 읽거나 쓰는 방식을 나타내는 용어입니다.

순차 I/O는 데이터를 연속적인 순서로 접근하는 방식이고, 랜덤 I/O는 데이터를 임의의 순서로 접근하는 방식입니다.

예를 들어, 하드디스크에서 파일을 읽을 때, 랜덤 I/O는 파일의 특정 부분만 읽거나 쓰기 위해 디스크 헤드를 움직이는 방식이고, 순차 I/O는 파일의 처음부터 끝까지 읽거나 쓰기 위해 디스크 헤드를 한 방향으로 움직이는 방식입니다.

HDD와 SSD

일반적으로, Flash Memory 를 사용하는 SSDHDD 에 비해 초당 처리 횟수가 약 1000배 가량 빠릅니다.
그런데 디스크의 헤더를 움직이지 않고 한번에 많은 데이터를 읽는 순차 I/O 에서는 HDD나 SSD는 성능상 거의 차이가 없긴합니다. 그러나, DB 서버에서 대부분의 I/O는 랜덤 I/O 작업이고 SSD는 이러한 랜덤 I/O 에서 뛰어난 성능을 보입니다.

HDD에서 랜덤 I/O는 디스크 헤드의 이동 시간이 많이 걸리므로 순차 I/O보다 느린 반면, SSD와 같은 플래시 메모리 기반의 디스크는 랜덤 I/O와 순차 I/O의 성능 차이가 크지 않습니다.

발생 상황

DB 서버에서 순차 I/O랜덤 I/O가 발생하는 상황은 아래와 같습니다.

순차 I/O

  • 테이블의 모든 데이터를 조회하는 상황
  • 대량의 데이터를 정렬하거나 그룹화 하는 상황
  • 풀 테이블 스캔

랜덤 I/O

  • WHERE 절(조건)이 포함된 쿼리를 실행해 데이터를 조회하는 상황
  • WHERE 절(조건)이 포함된 쿼리를 실행해 데이터를 삭제하거나 수정하는 상황
  • 인덱스 레인지 스캔

순차 I/O 상황은 디스크에서 연속적인 데이터를 읽거나 쓰는 상황이기 때문에 대량의 데이터를 처리하는 데 성능이 좋습니다.

랜덤 I/O 상황은 디스크의 헤드가 여러 위치를 탐색해야 하는 상황이므로 비교적 느린 작업입니다.

따라서 디스크의 성능은 헤드의 이동 없이 얼마나 많은 데이터를 순차적으로 저장하느냐에 달려있습니다.
즉, 랜덤 I/O를 줄이는 것이 성능 개선에 중요합니다.

쿼리 튜닝

데이터베이스의 성능을 향상시키기 위해서는 순차 I/O 상황을 늘리고 랜덤 I/O 상황을 줄이는 것입니다. 하지만 랜덤으로 저장된 데이터를 순차적으로 바꾸기는 쉽지 않습니다. 따라서 랜덤 I/O 상황을 줄여야 쿼리 성능이 향상되는데 이는 쿼리를 처리하는데 꼭 필요한 데이터만을 읽고 쓰도록 쿼리를 개선하는 것을 의미합니다.

인덱스 레인지 스캔 & 풀 테이블 스캔

인덱스 레인지 스캔은 데이터를 읽기 위해 주로 랜덤 I/O를 사용하고, 풀 테이블 스캔순차 I/O를 사용합니다. 그래서 큰 테이블의 레코드 대부분을 읽는 작업에서는 인덱스를 사용하지 않고 풀 테이블 스캔을 사용하도록 유도할 수도 있습니다.
이는 순차 I/O가 랜덤 I/O 보다 훨씬 많은 레코드를 읽어올 수 있기 때문입니다.

참고

Real MySQL 8.0(백은빈, 이성욱 지음)

0개의 댓글