랜덤I/O와 순차I/O와 같은 디스크 읽기 방식을 살펴보고자 한다.
컴퓨터의 CPU나 메모리와 같은 전기적 특성을 가진 장치는 빠르게 발전하지만 기계식 장치의 성능은 그렇지 못했다.
요즘에는 하드 디스크보다 SSD가 많이 사용되지만 아직도 데이터를 저장하는 장치는 CPU와 메모리와 같은 장치에 비해 느린 것이 분명 사실이다. 백엔드 개발자인 사람들도 api의 성능을 높이기 위해 고민하는 것이 데이터베이스 튜닝이 빠질 수 없을 만큼 어떻게 I/O를 빠르게 할 수 있을지에 대해 고민을 많이 하는 것이 분명하기 때문에 이론적으로 어떻게 이뤄지는지도 중요하다고 생각한다.
HDD와 SSD
컴퓨터의 CPU나 메모리에서 전자식 장치를 사용하지만 드라이브가 HDD인 기계식 장치일 경우가 있다. 그렇게 되면 HDD를 많이 사용해야된다고 한다면 디스크 장치가 병목이 된다. 그래서 대체할 수 있는 SSD인 전자식 장치가 등장해서 그나마 빨라졌다고 볼 수 있다.
HDD는 데이터를 저장하기 위한 플래터라고 하는 원판이 있었다면 SSD는 플래시 메모리를 장착하였다. 그래서 HDD였다면 원판을 회전시켜서 조회하여야했지만 SSD는 회전시키지 않아도 빠르게 데이터를 찾아 읽을 수 있다. 또한 메모리라고 데이터가 삭제되는 것이 아닌 전원이 공급되지 않아도 삭제되지 않는다.
1초당 처리가능한 연산의 횟수를 수치로 나타낸 것인데 값이 클수록 많은 연산을 처리할 수 있다는 걸 알 수 있다.
메모리와 HDD의 처리 속도는 10만배이상 정도 차이가 나는 것을 볼 수 있고 SSD는 메모리와 1000배차이 나는 것을 비교할 수 있다. 이 정도의 속도차이가 나는 것을 볼 수 있고 요즘에도 HDD -> SSD로 변경하는 것을 볼 수 있다.
순차I/O에서는 SSD가 HDD보다 조금 빠르거나 비슷한 성능을 보이긴한다. 하지만 SSD의 장점은 HDD보다 랜덤 I/O가 빠르다는 것인데 데이터베이스에서 순차I/O는 그다지 많이 일어나지 않고 랜덤I/O를 사용하여 그렇게 크지않은 데이터들을 읽고 쓰는 작업이 많아 SSD가 RDBS의 스토리지로는 정말 좋은 장치라고 할 수 있다.
이것은 랜덤 I/O를 벤치마크한 결과이다. 결과를 보면 초당 SSD는 436개의 트랜잭션을 처리하고 HDD는 60개를 처리한 것을 볼 수 있다. 책의 저자가 간단하게 테스트했다곤 하지만 5배 이상이 차이나는 결과를 보여준다. 환경에 따라 다르지만 이 수치만 보아도 실제 서버에서 SSD와 HDD는 많은 성능차이가 날 것이라고 생각이 든다.
랜덤 I/O와 순차 I/O
랜덤 I/O는 HDD에 있는 원판인 플래터를 돌려서 읽고 싶은 데이터가 존재하는 위치로 디스크 헤더를 이동 후 데이터를 읽는 것을 의미하는데 순차 I/O도 작업과정은 비슷하지만 차이가 존재한다.
순차 I/O는 3개의 페이지를 디스크에 기록하기 위해 1번의 시스템을 콜 했지만 랜덤 I/O는 3개의 페이지를 디스크에 기록하기 위해서 3번 요청하는 것을 알 수 있다. 그렇다면 순차 I/O는 디스크 헤드를 1번 이동시켰고 랜덤 I/O는 3번 이동했다는 것이다.
데이터를 읽고 쓰는데에 시간이 결정되는 것은 이 과정에서 얼마나 걸릴지 결정된다. 그렇다면 순차I/O가 랜덤 I/O보다 3배 더 빠르다고 볼 수 있다. 이렇듯이 디스크 헤드를 얼마나 많이 안 움직이고 데이터를 한번에 기록할 수 있나에 대해 성능이 달라진다.
사실 HDD보다 SSD가 속도 차이가 많이 난다고 한들 SSD에서도 순차 I/O와 랜덤 I/O는 차이가 존재한다. 데이터베이스에서 1초당 처리 가능한 쿼리 수를 나타내는 Throughput이 떨어진다. 그래서 우리가 쿼리를 튜닝하는 목적은 순차 I/O보다 느린 랜덤 I/O의 성능을 최적화하는 것이라고 볼 수도 있다.