potato.log
로그인
potato.log
로그인
디스크 읽기 방식
공부하는 감자
·
2024년 3월 3일
팔로우
0
mysql
0
MySQL
목록 보기
9/74
디스크 읽기 방식
데이터 저장 매체는 컴퓨터에서 가장 느린 부분이다.
데이터베이스의 성능 튜닝은 어떻게 디스크 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
공부하는 감자
책을 읽거나 강의를 들으며 공부한 내용을 정리합니다. 가끔 개발하는데 있었던 이슈도 올립니다.
팔로우
이전 포스트
MySQL의 격리 수준
다음 포스트
인덱스
0개의 댓글
댓글 작성