디스크 읽기 방식

공부하는 감자·2024년 3월 3일
0

MySQL

목록 보기
9/74
post-thumbnail

디스크 읽기 방식

  • 데이터 저장 매체는 컴퓨터에서 가장 느린 부분이다.
  • 데이터베이스의 성능 튜닝은 어떻게 디스크 I/O를 줄이느냐가 관건일 때가 상당히 많다.

HDD와 SSD

  • 컴퓨터에서 CPU나 메모리 같은 주요 장치는 대부분 전자식 장치지만, 하드 디스크 드라이브는 기계식 장치다.
  • 그래서 데이터베이스 서버에서는 항상 디스크 장치가 병목이 된다.
  • 디스크 장치의 종류
    • HDD (Hard Disk Drive) : 기계식 하드 디스크 드라이브
    • SSD (Solid State Drive) : 기계식 하드 디스크 드라이브를 대체하기 위한 전자식 저장 매체

SSD

  • 기존 하드 디스크 드라이브와 같은 인터페이스를 지원한다.
    • 인터페이스: SATA나 SAS
    • 내장 디스크나 DAS 또는 SAN에 그대로 사용할 수 있다.
  • 기존 하드 디스크 드라이브에서 데이터 저장용 플래터(원판)을 제거하고, 대신 플래시 메모리를 장착하고 있다.
    • 디스크 원판을 기계적으로 회전시킬 필요가 없다.
    • 데이터를 읽고 쓰기가 아주 빠르다.
    • 전원이 공급되지 않아도 데이터가 삭제되지 않는다.
    • 컴퓨터의 메모리(D-Ram)보다는 느리지만 기계식 하드 디스크 드라이브보다는 훨씬 빠르다.

속도의 차이

  • 메모리와 디스크의 처리 속도는 10만 배 이상의 차이를 보인다.
  • SDD는 1000배 가량의 차이를 보인다.
  • 시중에 판매되는 SSD는 대부분 기존 하드 디스크 드라이브보다는 용량이 적으며 가격이 비싼 편이다.
    • 그래도 예전보다는 훨씬 대중화된 상태이다.
    • 요즘은 DBMS용으로 사용할 서버에는 대부분 SSD를 채택하고 있다.
  • SSD의 장점은 기존 하드 디스크 드라이브보다 랜덤 I/O가 훨씬 빠르다는 것이다.
    • 순차 I/O에서는 SSD가 하드 디스크 드라이브보다 조금 빠르거나 거의 비슷한 성능을 보이기도 한다.
    • 데이터베이스 서버에서 순차 I/O 작업은 그다지 비중이 크지 않고, 랜덤 I/O를 통해 작은 데이터를 읽고 쓰는 작업이 대부분이므로 SSD의 장점은 DBMS용 스토리지에 최적이다.
  • 일반적인 웹 서비스(OLTP) 환경의 데이터베이스에서는 SSD가 하드 디스크 드라이브보다는 훨씬 빠르다.

랜덤 I/O와 순차 I/O

  • 랜덤 I/O와 순차 I/O는 하드 디스크 드라이브의 플래터(원판)을 돌려서 읽어야 할 데이터가 저장된 위치로 디스크 헤더를 이동시킨 다음 데이터를 읽는다.

디스크의 성능

  • 디스크의 성능은 디스크 헤더의 위치 이동 없이 얼마나 많은 데이터를 한 번에 기록하느냐에 의해 결정된다.
    • 디스크에 데이터를 쓰고 읽는 데 걸리는 시간

랜덤 I/O

  • 데이터를 임의의 순서대로 읽거나 쓰는 방식
  • 여러 번 쓰기 또는 읽기를 요청하므로, 순차 I/O보다 작업 부하가 훨씬 크다.
    • 예를 들어, 3개의 페이지를 디스크에 기록하기 위해 3번 시스템 콜을 요청한다.
  • 데이터베이스 대부분의 작업은 이러한 작은 데이터를 빈번히 읽고 쓰기 때문에 MySQL 서버에는 그룹 커밋이나 바이너리 로그 버퍼 또는 InnoDB 로그 버퍼 등의 기능이 내장되어 있다.
  • 디스크 원판을 가지지 않는 SSD 드라이브에서도 랜덤 I/O는 순차 I/O보다 전체 스루풋(Throughput)이 떨어진다.
    • SSD 드라이브 사양에도 항상 순차 I/O와 랜덤 I/O의 성능 비교를 구분해서 명시한다.

순차 I/O

  • 데이터를 연속적인 순서대로 읽거나 쓰는 방식
  • 랜덤 I/O와 비교하여 디스크의 헤더를 적게 움직여서 한 번에 많은 데이터를 읽는다.
    • 예를 들어, 3개의 페이지를 디스크에 기록하기 위해 1번 시스템 콜을 요청한다.
  • 디스크 헤드 이동이 적기 때문에 처리 속도가 빠르다.

RAID 컨트롤러

  • 랜덤 I/O와 순차 I/O 모두 파일에 쓰기를 실행하면 반드시 동기화(fsync 또는 flush 작업)가 필요하다.
  • 순차 I/O인 경우에도 이러한 파일 동기화 작업이 빈번히 발생한다면 I/O와 같이 비효율적인 형태로 처리될 때가 많다.
  • RAID 컨트롤러의 캐시 메모리는 아주 빈번한 파일 동기화 작업이 호출되는 순차 I/O를 효율적으로 처리될 수 있게 변환하는 역할을 한다.
    • 기업용으로 사용하는 데이터베이스 서버에는 캐시 메모리가 장착된 RAID 컨트롤러가 일반적으로 사용된다.

쿼리 튜닝

  • 일반적으로 쿼리를 튜닝하는 것은 랜덤 I/O 자체를 줄여주는 것이 목적이다.
    • 쿼리를 처리하는 데 꼭 필요한 데이터만 읽도록 쿼리를 개선하는 것

Reference

참고 서적

📔 Real MySQL 8.0

참고 사이트

Google Gemini

profile
책을 읽거나 강의를 들으며 공부한 내용을 정리합니다. 가끔 개발하는데 있었던 이슈도 올립니다.

0개의 댓글