-
디스크 읽기 방식
- CPU나 메모리처럼 전기적 특성을 띤 장치의 성능은 짧은 시간동안 매우 빠른 속도로 발전했지만 디스크 같은 기계식 장치의 성능은 많이 제한
- 최근에는 자기 디스크 원판에 의존하는 HDD보다 SSD활용
- 이러한 이유로 데이터베이스의 성능 튜닝은 어떻게 디스크 I/O를 줄이느냐가 관건
-
HDD, SSD
- HDD는 기계식 장치로 데이터베이스 서버에서는 항상 디스크 장치가 병목현상을 발생시킴
- 이러한 현상을 극복하기 위해 전자식 저장 매체인 SSD가 많이 출시
- SSD도 기존 HDD와 같은 인터페이스(SATA, SAS)지원하므로 그대로 사용 가능
- SSD는 HDD에서 저장용 원판을 제거하고 플래시 메모리를 장착, 이에 따라 원판을 회전시켜서 저장할 필요가 없으므로 빨리 데이터를 읽고 쓸수 있음
- 플래시 메모리는 전원이 공급되지 않아도 데이터가 삭제되지 않음
- 성능
- 디스크의 헤더를 움직이지 않고 한번에 많은 데이터를 읽는 순차I/O에서는 SSD가 HDD보다 조금 빠르거나 거의 차이가 없는 수준
- 하지만 디스크의 헤더를 움직이는 랜덤I/O에서는 SSD가 월등히 빠름
- 데이터베이스에서 대부분의 작업은 랜덤I/O를 이용해서 작은 데이터를 쓰고 읽는 경우가 많음
- 따라서 SSD는 DBMS에 적합함
-
랜덤I/O와 순차I/O
- 순차I/O
- 3개의 페이지를 디스크에 기록할 때 1번 시스템 콜 요청
- 즉, 디스크 헤더를 한번 움직이고 데이터를 기록
- 랜덤 I/O
- 3개의 페이지를 디스크에 기록할 때 3번 기스템 콜 요청
- 즉, 매번 기록할 때마다 디스크 헤더를 이동
- 결국 순차I/O가 랜덤I/O보다 거의 3배정도 빠르다고 볼 수 있음
- 즉, 디스크의 성능은 얼마나 이동하지 않고 데이터를 한번에 기록하느냐에 따라 결정됨
-
쿼리 튜닝
- 사실 쿼리를 튜닝해서 I/O를 순차I/O로 바꿔서 실행할 방법은 많지 않음
- 일반적으로 쿼리를 튜닝하게되면 랜덤I/O자체를 줄이는 활동
- 즉, 꼭 필요한 데이터만 읽도록 쿼리를 개선