MySQL 스토리지
DB의 성능 튜닝은 어떻게 디스크 I/O를 줄이면서 최대한의 작업을 할 수 있는가에 대한 고민입니다.
그래서 여기서는 스토리지 I/O 속도와 I/O의 방식에 대해서 이야기 해보겠습니다.
스토리지 속도는 서버에 사용하는 스토리지 종류에 따라서 다릅니다.
서버에 사용하는 스토리지 종류
: 네가지로 나눌 수 있습니다. 아래로 내려가면 내려갈 수록 기존의 스토리지의 단점을 극복해나가면서 생겨난 스토리지의 종류입니다.
1) Internal Disk
- 내장 디스크라고 불리고 개인용 PC의 본체에 장착된 디스크와 비슷한 구성과 종류로 구성됩니다.
- 다만 DB용으로 최적화된 스토리지를 개인 PC에 장착하는 것처럼 4~6개 정도를 연결해서 사용하는 형태입니다.
- 연결할 수 있는 공간과 갯수가 제한적이기 때문에 용량의 한계가 있는 단점이 있습니다.
2) DAS(Direct Attached Storage)
- Internal Disk의 단점인 적은 용량과 연결 제한 때문에 사용하는 장치가 DAS입니다.
- DAS는 Internal Storage와 같은 SATA나 SAS와 같은 케이블로 연결된다. 성능도 비슷합니다.
- 다만, 장점은 디스크를 모아서 체계적으로 장착할 수 있다는 점이다. 최근엔 최대 200개 이상을 장착해서 관리할 수도 있다고 합니다.
- 단점은 하나의 컴퓨터 본체에만 직접 연결해서 사용할 수밖에 없다는 점이다. 스토리지를 여러 컴퓨터가 동시에 연결할 수 없습니다.
3) NAS(Network Attached Storage)
- Internal Disk와 DAS(Direct Attached Storage)의 단점인 "용량확장의 한계"와 "여러 컴퓨터에서 동시에 사용이 불가능"을 해결합니다.
- NAS(Network Attached Storage)는 TCP/IP를 통해 DB에 연결됩니다.
- Network를 이용해서 여러 컴퓨터에서 동시에 연결해서 사용이 가능하지만, Internal Disk와 DAS의 SATA,SAS 방식의 직접 연결보다 속도가 매우 느립니다.
- NAS는 TCP/IP를 이용하기 때문에 서버용 DB로는 빈번한 I/O에는 적합하지 않아서 사용되지 않습니다.
4) SAN(Storage Area Network)
- SAN은 DAS로 구축할 수 없는 대용량의 스토리지 공간을 제공하는 장치입니다.
- 여러 컴퓨터에서 동시에 사용할 수 있습니다.
- 내부적으로 스토리지와 컴퓨터 본체가 광케이블로 연결되기 때문에 빠르고 안정적인 I/O를 보장합니다.
- 고가의 구축 비용이 들어갑니다.
- 기업에서 내부 중요 데이터를 다루는 경우에 구축합니다.
실제 서버 스토리지 사용
: 상용으로 사용하는 서버 스토리지 형태는 NAS를 제외한 Internal Storage, DAS, SAN 입니다.
Internal Storage => Direct Attached Storage => Storage Area Network
- 오른쪽으로 갈수록 고사양, 고성능, 고비용입니다.
- 오른쪽으로 갈수록 더 많은 스토리지를 장착 할 수 있습니다.
- Internal Storage, DAS는 단일 컴퓨터 연결
- SAN은 여러 컴퓨터에 연결이 가능합니다.
스토리지의 종류
: 스토리지를 연결해서 사용하는 형태에 대해서 위에서 살펴보았습니다. 이제는 스토리지의 종류에 대해서 이야기를 해보겠습니다.
- 여기서 부터는 스토리지를 디스크라고 부르겠습니다.
- 현재 컴퓨터 주요 장치들은 메모리를 이용한 전자식 장치입니다. 그런데 데이터를 저장하는 디스크만 기계식과 전자식으로 사용됩니다.
- 기계식 디스크(예를 들면, 하드디스크)는 항상 컴퓨터의 주요장치(CPU,RAM 등)의 속도를 맞추지 못하는 병목지점이 됩니다.
- 아래 표를 보시면 어느 시점에서 transaction 수가 늘지 않습니다. 이 지점에서 디스크가 감당하지 못해 더이상 처리를 하지 않는 병목지점을 생성합니다.
- 이와 같은 현상의 이유는 기계식 디스크보다 상대적으로 컴퓨터의 주요장치들이 더 빠른 연산 속도를 가지고 있기 때문입니다.
그런데 요즘에는 하드디스크(기계식 디스크) 대신 Solid State Disk(전자식 디스크)를 많이 사용하는 경향이 생겼습니다.
- SSD(Solid State Disk)는 기존에 기계식 디스크의 저장용 플레터(원판)을 제거하고 대신 비휘발성 플래시 메모리를 장착하여 만들었습니다.
- SSD를 통해서 기계식 디스크로 인해 빨라진 I/O를 통해서 I/O 병목현상을 어느정도 해결하게됩니다.
- 속도는 CPU > D-RAM > SSD > HDD 순입니다.
전자식 디스크의 장점
- 기계식(HDD)을 전자식(SSD)으로 대체하고 개선된 점 중 하나는 랜덤 I/O 작업에 대해서 상당한 속도 향상을 보여줍니다.
- 속도 향상의 이유는 기계식은 플레터(HDD의 저장 원판)의 데이터 지점까지 찾아가야합니다.
- 랜덤하게 I/O가 발생하는 경우, 여기 저기 분포해있는 데이터의 지점을 찾아가는 물리적인 시간이 걸리게됩니다.
- 전자식 디스크인 SSD는 그 물리적인 시간이 사실 없다라고 봐도 될 정도로 빠르기때문에 랜덤 I/O 발생시, 기계식 디스크 보다 월등히 빠릅니다.
전자식 디스크를 활용해야하는 이유
- 지금의 컴퓨터를 이용한 서비스 환경, 예를 들면, 모바일이나 웹을 통한 데이터 제공을 하는 경우에는 사실 event-driven 방식의 서비스를 응답해야합니다.
- 즉, 사용자의 요청이 왔을 때마다 그때 그때 응답을 바로 해주어야합니다. 이 말은 랜덤 I/O가 발생하는 환경이라는 것입니다.
- 물론 많은 요청이 오지 않은 경우에는 처리에 많은 시간이 걸리지 않겠지만, 요청이 몰리는 경우 서버가 다운되는 상황까지 발생할 수 있습니다.
- 그래서 랜덤 I/O에 강한 SSD와 같은 전자식 디스크를 사용해야합니다.
- 또한, 쿼리 튜닝을 통해 꼭 필요한 쿼리만 요청하게하고, 쿼리 수를 줄여주는 방향으로 DB를 사용해야 좋은 성능을 낼 수 있습니다.
이상으로 글을 마치겠습니다.