A Hardware Guide to PostgreSQL Performance – Disk 편

2020.09.08

라인웍스는 데이터를 많이 다루는 회사이기 때문에 사용하는 데이터베이스 서버의 성능이 중요합니다.

CDM 데이터와 관련된 내부 분석의 수요 증가로 전용 Database 서버를 구축하기로 하여, 고성능 PostgreSQL DB 서버를 구축하게 되었습니다. 총 600만원의 예산으로, 이를 초과하지 않는 선에서 최대한 성능이 높은 견적을 내려고 하였습니다.

Dell, HPE, Inspur 같은 제조사의 기성품을 구매하는 대신 직접 견적을 내어서 조립하였습니다.

직접 구성하는 만큼 부품 선택이 중요하였고, 어떤 가이드라인으로 어떤 부품에 투자하였는지 공유하고자 합니다.

첫째로, 디스크(I/O)의 성능을 최우선으로 두었습니다. PostgreSQL의 데이터 access 구조를 살펴봄으로써 왜 디스크가 중요한지 알아보겠습니다.

Data Access in PostgreSQL

PostgreSQL은 Shared Buffers와 OS Cache 두 가지 buffer를 사용하는 “Double Buffering” 기술을 사용하여 데이터에 access합니다. Shared Buffers는 PostgreSQL 자체의 공용 Page Queue이고, OS Cache는 OS(Kernel)가 관리하는 Cache입니다.

클라이언트가 PostgreSQL에 접속하면 Backend Process가 생성됩니다. Backend Process는 한 클라이언트가 요청하는 모든 쿼리를 처리합니다.

Backend process는 Shared Buffers에 데이터를 요청하고, 필요한 데이터가 Shared Buffers에 없다면 OS Cache에 데이터를 요청합니다. OS Cache에도 데이터가 없다면 디스크 I/O 요청을 보냅니다.

OS Cache는 LRU(Least Recently Used) 알고리즘을 사용하기 때문에 자주 사용되는 데이터도 요청시 caching되지 않았을 가능성이 높습니다. 이 때문에 실사용시 많은 디스크 I/O를 요청하게 됩니다.

Disk 편

현재 양산되고 있는 디스크의 종류는 크게 5가지가 있습니다:

  1. HDD: 일반 하드 드라이브입니다.
  2. SATA SSD: 보급형 SSD입니다. 하드 드라이브에 특화된 SATA 프로토콜을 사용합니다.
  3. NVMe SSD (PCIe 3.0): PCIe 기반의 SSD입니다. NAND 플래시에 특화된 NVMe 프로토콜을 사용합니다.
  4. NVME SSD (PCIe 4.0): 보다 신형인 PCIe 4.0을 사용함으로써 전송속도가 더욱 뛰어납니다.
  5. Optane SSD: NAND 플래시와 DRAM의 중간에 있는 3D X-Point를 사용한 인텔 자체개발 SSD입니다.

아래는 각 저장 매체에 대한 대략적인 성능 차트입니다:

TypeHDDSATA SSDNVMe SSD (PCIe 3.0)NVMe SSD (PCIe 4.0)Optane SSD
Sequential Read (MB/s)~200~550~3,500~5,000~2,500
Sequential Write (MB/s)~200~550~3,300~4,400~2,000
Random Read (4KB IOPS)~100~98,000~550,000~750,000~550,000
Random Write (4KB IOPS)~100~90,000~600,000~700,000~550,000
Latency (μs)~5000~150~50~50~10
Write Endurance (TBW)반영구적~500~500~1800~8760
Price (KRW/1GB)~50~170~250~320~1300

Optane SSD가 Latency와 Write Endurance면에서 압도적이기 때문에 DB에 특화된 SSD라고 볼 수 있습니다. Sequential Read/Write는 NVMe와 비슷하지만 Latency 우세 때문에 1KB 정도의 작은 파일의 Random I/O에서는 DRAM에 근접하는 성능이 나옵니다. 하지만 PostgreSQL은 기본 page size가 8KB이라서 가격대비 장점이 없습니다.

pgbench 에서 위 저장매체들의 성능 차이를 볼 수 있습니다:

  • HDD: WD WD1003FZEX-0 1TB
  • SATA SSD: Samsung 860 EVO 500GB
  • NVMe SSD (PCIe 3.0): Samsung SSD 970 PRO 512GB
  • NVMe SSD (PCIe 4.0): Corsair MP600 2TB
  • Optane SSD: Intel Optane 900p 280GB

저희는 위 데이터에 기반하여, SATA SSD의 용량과 Optane에 버금가는 성능을 둘 다 가지고 있는 PCIe 4.0 NVMe SSD를 선택하였습니다.

PCIe 4.0 기반의 SSD는 워낙 신기술이어서 일반 소비자용으로 판매되고 있는 것은 사실상 한가지 밖에 없습니다. Corsair, Gigabyte, Sabrent 등 회사들이 PCIe 4.0 SSD를 판매하고 있지만, 방열판의 디자인이 다른 것을 제외하고는 전부 다 Phison 사의 PS5016-E16 컨트롤러와 Toshiba 사의 BiCS4 3D TLC 낸드플래시를 사용합니다.

그 중에서 저희는 방열판이 가장 좋아보이는 Gigabyte 사의 AORUS SSD를 선택하였습니다: https://www.gigabyte.com/Solid-State-Drive/AORUS-NVMe-Gen4-SSD-2TB#kf

타 제품들과 달리 방열판이 통구리로 되어있어서 NVMe SSD의 높은 발열을 잘 식혀줄 수 있을 것 같았습니다.

6TB 정도의 용량이 필요해서 개당 65만원인 2TB SSD를 3개 구매하였고, 총 195만원을 사용하였습니다.

400만원 정도가 남았고, 벌써 예산의 3분의 1을 디스크에다 사용했습니다.

다음 편에서는 위 Database Server Priority 그래프에서 디스크 다음으로 중요하다고 언급한 메모리에 대하여 알아보겠습니다.

William Jung

Backend Engineer at Linewalks, Rising Junior at Yale University

William Jung