전기적 장치에 비해 발전 속도가 비교적 느린 기계적 장치
- 컴퓨터의 전기적 특성을 지닌 장치(CPU, Memory)는 매우 빠르게 발전된데 비해 디스크와 같은 기계적 장치는 발전 속도가 느리다.
- 최근에는 SSD가 등장하여 HDD보다 성능이 나아졌으나, 여전히 느리다.
- 즉, DB의 성능 튜닝은 어떻께 IO를 줄이느냐가 관건이다 -> 쿼리 튜닝을 해야하는 이유
- 일반적으로 DB에서 쿼리를 튜닝하라는 것은 랜덤 IO 자체를 줄여주는 것이 목적이다. 즉, 랜덤 IO를 줄인다는 것은 쿼리를 처리하는 데에 꼭 필요한 데이터만 읽도록 쿼리를 개선하는 것을 의미한다.
순차 IO란?
- 데이터를 하나의 물리적 주소를 이용하여 이동한 뒤 순차적으로 조회 및 쓰기작업을 하는 것
- 데이터가 저장된 하나의 물리적 주소만을 이용한다.
랜덤 IO란?
- 데이터마다 각각의 물리적 주소로 접근하여 조회 및 쓰기 작업을 수행한다.
- 데이터에 개별적 물리적 주소를 이용하여 접근하기에 데이터 수만큼의 물리적 주소를 필요로한다. (처리율이 떨어지는 이유)
→ 순차 IO와 랜덤 IO를 구분 짓는 점은 여러 개의 데이터를 어떻게 접근하여 조회나 쓰기 작업을 하냐이다.
HDD 와 SDD
- HDD (Hard Disk Drive)
- 데이터가 저장된 물리적 위치로 지속적으로 이동하여 읽기 쓰기 작업을 하는 장치이다.
- 동그란 원판위에 헤더를 두고, 이 헤더가 작업을 진행하는 방식이다.
- SSD와 비교하여 순차 IO는 속도가 비슷하거나, 조금 느리지만 랜던 IO는 현저히 느리다.
- SSD (Solid State Drive)
- 원판에 저장하는 HDD와 다르게 플래쉬 메모리에 데이터를 저장하는 형태의 장치이다.
- 플레쉬 메모리는 전원이 들어오지 않아도 데이터가 지워지지 않는다.
- 헤더를 이용해 데이터를 찾는 HDD와 다르게 물리적 주소를 갖고 있는 매핑 테이블을 통해 빠르게 접근한다.
- 헤더가 없어 순차 IO와 랜던 IO의 처리율 차이가 없을 것 같지만, 순차 IO가 랜덤 IO보다 처리율이 더 좋다.
- 랜덤 IO는 각각의 데이터들을 모두 매핑 테이블을 이용하여 물리적 위치로 접근한다.
- 순차 IO는 하나의 데이터의 물리적 주소를 매핑 테이블을 이용하여 찾아, 순차적으로 데이터들을 읽어들인다.
- 큰 테이블의 레코드의 대부분을 조회하거나 쓰기작업을 하는 경우, 인덱스를 사용하지 않고 풀 테이블 스캔을 하도록
옵티마이저가 유도하는 이유가 위와 같다.
- 순차 IO보다 랜덤 IO가 더 많은 DB 특성상 HDD보다 SSD를 사용하는 것이 유리하다. (하지만 비용이 SSD가 더 비싸다.)
- 랜던 IO / 순차 IO 모두 쓰기 작업시 동기화의 과정을 거치게 되는데 이 때 데이터를 쓸 때마다 동기화를 한다면 랜덤 IO와 성능차이가 크지 않다. 이러한 점을 방지하기 위해서 캐쉬 메모리를 갖춘 RAID 컨트롤러**가 임시로 저장했다가 완료되면 변경사항을 한 번에 동기화를 해주는 과정을 거친다.
언제 순차 IO와 랜덤 IO가 발생할까?
각각의 IO가 언제 발생한다는 정확한 기준은 없다. 아래의 부분은 어느 글에서 보고 의미가 있어보이는 고찰이어서 적어보았다.
클러스터링 인덱스(PK) -> 순차 IO
- 클러스터링 인덱스의 경우 논리적으로 데이터가 저장된 순서와 물리적인 순서가 동일한 점을 이용하여 바로 옆의 데이터를 조회하면 되기에 순차 IO가 효율적이여서 순차 IO가 사용된다.
- 하지만 띄엄띄엄 데이터를 조회하거나 단일 데이터를 조회하는 경우 랜덤 IO가 발생한다.
세컨더리 인덱스 -> 랜덤 IO
- 세컨더리 인덱스의 경우 물리적 위치를 저장하는 것이 아닌 클러스터링 인덱스의 위치를 저장하고 있다.
- 세컨더리 인덱스를 이용해 조회하는 명령은 여러 곳에 분산된 데이터에 접근하게 되므로 랜덤 IO 방식으로 동작한다.
참고
- RAID 컨트롤러
- 스토리지 어레이에서 하드 디스크 드라이브를 관리하는데 사용되는 장치이다.
- 물리 디스크들을 묶어서 추상화하여 OS에서 디스크 그룹을 논리적 단위로 보여준다.
- RAID (Redundant Array of Independent Disks)
- 디스크 장애 극복 솔루션으로 주로 SAN(Storage Area Network)에서 사용된다.
- 데이터를 여러 하드 디스크에 저장하여 디스크 장애시 데이터를 보호하고 무중단 운영을 제공한다.
참고 자료 : https://velog.io/@ddangle/%EC%88%9C%EC%B0%A8Sequential-IO%EC%99%80-%EB%9E%9C%EB%8D%A4Random-IO,
https://ilovestorage.tistory.com/16, https://ilovestorage.tistory.com/5
'DB' 카테고리의 다른 글
인덱스 (index) (2) (1) | 2024.11.15 |
---|---|
인덱스 (Index) (1) | 2024.11.15 |
구조적 질의어 (SQL, Structured Query Language) ( 3 ) (1) | 2024.11.08 |
구조적 질의어 (SQL, Structured Query Language) ( 2 ) (0) | 2024.11.06 |
구조적 질의어 (SQL, Structured Query Language) ( 1 ) (1) | 2024.11.05 |