Search

HDD 환경에서 PostgreSQL 실험 기록

생성일
2025/05/02 02:41
태그
AI 요약
날짜
상위 항목
하위 항목
Docker + PostgreSQL을 외장 HDD에 마운트해서 운영했을 때 발생한 성능 병목과 개선 시사점 정리

실험 목적

실제 환경에서 외장 HDD를 Docker Volume으로 활용할 때 성능 병목을 체감
SSD가 아닌 조건에서도 병목을 예측/완화할 수 있는 구조적 대안 도출
Whisper + PostgreSQL + MinIO 조합의 실제 성능 한계 확인

실험 환경

Docker Compose
PostgreSQL 15
외장 HDD: WD My Passport 2TB (exFAT → APFS 포맷)
Docker Volume
/Volumes/my-hdd/postgres-data:/var/lib/postgresql/data (bind mount)
기타 구성
Whisper 추론 결과 저장 (이미지/오디오)
FastAPI & MinIO 포함, 동시에 저장 작업 수행

체감된 병목 현상

항목
증상
docker-compose up
initdb 실행 지연 (수십 초~1분)
DDL/DML 처리
INSERT/CREATE TABLE에 명백한 I/O 대기 발생
MinIO + PostgreSQL 동시 접근
저장 지연 → Whisper 추론 파이프라인까지 밀림
전체 시스템 반응 속도
SSD 대비 체감 지연율 2~10배 발생

병목 원인 분석

HDD는 랜덤 쓰기 성능이 극히 낮음 (IOPS 수백 수준)
PostgreSQL은 fsync, WAL, heap write 등 디스크 쓰기 중심
MinIO도 동시에 파일 쓰기를 하면서 I/O queue 충돌
exFAT 포맷 사용 시 PostgreSQL 불가 → APFS로 포맷 변경

개선/완화 전략

전략
설명
SSD 사용
근본적 해결, IOPS 급상승
MinIO와 DB 디스크 분리
데이터 경합 방지
fsync=off (개발용)
WAL 쓰기 속도 향상 (주의: crash-safe 아님)
batch insert + 버퍼링
INSERT 병목 완화
시간단위 prefix 분할
MinIO 디렉토리 I/O 경합 최소화

결론

프로토타입을 개발함에 있어서 모든 인프라가 완벽할리가 없다.
데이터 하나하나 소중하다보니 최대한 많이 쌓으려고 하다보니 방구석에 있던 2TB 하드디스크를 꺼내게 되었다.
SSD를 쓰면 당연히 빠른 건 알고 있으나 여건이 되지 않아 HDD하드디스크에서 돌려봤더니 병목이 확실히 보였다. 실전 튜닝 포인트를 체감하고, SSD의 가치와 I/O 최적화 방향을 명확히 이해하게 된 경험이었다.