디스크 읽기 방식과 데이터베이스 성능 최적화

이재민·2023년 11월 20일

인덱스

인덱스란 데이터베이스에서 대한 검색 성능을 향상시키기 위해 사용되는 자료구조입니다.

인덱스를 설명하기 앞서 디스크에서 데이터를 읽어오는 방식에 대해 먼저 알아보려고 합니다.
컴퓨터에서 CPU나 메모리와 같은 전기적 특성을 띤 장치의 성능은 매우 빠르게 발전하였습니다. 반면, 디스크와 같은 기계식 장치의 성능은 상당히 제한적으로 발전하였습니다.
최근 하드 디스크보다 SSD를 많이 활용하지만, 여전히 가장 느린 부품입니다. 그렇기에 데이터베이스의 성능 튜닝은 얼마나 디스크 I/O를 줄이느냐가 관건인 경우가 많습니다.

디스크 읽기 방식

디스크 읽기 방식에는 순차 I/O, 랜덤 I/O 방식이 존재합니다.
두 방식의 차이점은 데이터 액세스 패턴에 있습니다.

순차 I/O

순차 I/O란 데이터를 순차적으로 읽거나 쓰는 방식입니다.

순차적으로 데이터에 접근하여 디스크 헤드의 이동이 최소화되고 성능이 향상되지만, 특정 데이터에 빈번한 액세스가 필요할 경우에는 비효율적인 방식일 수 있습니다.
순차 I/O 방식은 SSD가 하드 디스크 드라이브보다 조금 더 빠르거나 비슷한 성능을 보입니다. 하지만, 랜덤 I/O 에서는 SSD가 훨신 빠른 동작 성능을 보입니다.

랜덤 I/O

랜덤 I/O란 데이터를 임의의 순서로 읽거나 쓰는 방식입니다.

랜덤 I/O 접근 방식을 통해 필요한 데이터를 빠르게 액세스할 수 있는 장점이 존재하지만, 디스크 헤드의 빈번한 이동이 발생하여 성능 저하가 발생할 수 있습니다.

발생 상황

순차 I/O

  1. 테이블의 모든 레코드 스캔을 야기하는 SELECT 쿼리
  2. 인덱스의 모든 블록을 읽거나 쓰는 경우
  3. 데이터 정렬 or 그룹화

랜덤 I/O

  1. 특정 레코드나 데이터 블록을 찾기 위해 인덱스 탐색하는 경우
  2. WHERE 절의 조건을 포함한 쿼리를 실행하여 레코드를 탐색하는 경우
  3. 임의의 데이터 위치에 대한 갱신 or 삭제 연산이 수행되는 경우

성능 튜닝

앞서 언급했듯이 성능 튜닝은 얼마나 디스크 I/O를 줄이느냐가 관건이라고 말씀드렸습니다.
즉, 순차 I/O보다는 랜덤 I/O가 시스템 콜 횟수가 많기에 랜덤I/O를 줄인다는 것이 목적이라고 할 수 있습니다.
랜덤 I/O를 줄인다는 것은 쿼리를 처리하는데 꼭 필요한 데이터만 읽도록 쿼리를 개선하는 것을 의미합니다.

profile
문제 해결과 개선 과제를 수행하며 성장을 추구하는 것을 좋아합니다.

0개의 댓글