공유 볼륨·WAL·병렬 빌드가 겹칠 때
슬러그: 2026-clustervps-macmini-sqlite-wal-shared-volume-matrix.html. NFS/SMB 위 단일 *.db에 다중 Mac 쓰기는 잠금·캐시 때문에 지연이 흔합니다. DB 파일당 단일 작성자, 빌드 산출물은 로컬 SSD·승격만 공유가 안전합니다. Nomad·빌드 락, rsync·디스크, Watchman·IO, Mosh vs SSH, 블로그 홈.
- 체크포인트 버스트:
wal_autocheckpoint기본값이면 WAL을 메인 DB로 밀어 넣는 순간 링크·컴파일과 IO가 겹칩니다. - 가짜 병렬:
max_parallel만으로 동일 DB에 두 쓰기자를 붙이면database is locked·타임아웃이 납니다. - 수위 맹목:
*.wal/*.shm·캐시가 겹치면 1TB에서 여유가 빠르게 사라집니다.
의사결정 매트릭스: 볼륨 × WAL × 빌드 락 × 큐
| 시나리오 | 공유 볼륨·SQLite | 빌드 락·승격 | 큐·동시성 힌트 |
|---|---|---|---|
| CI 메타 DB 공유 | journal_mode=WAL, 작은 DB·VACUUM 윈도우. |
메타는 flock, 컴파일은 로컬. |
DB 쓰기자 1·Mac당 컴파일 2–3(16GB) / 3–4(24GB+)부터 스트레스. |
| 캐시 인덱스 | 로컬 복제 우선, 공유는 읽기 스냅샷. | 인덱스 job과 promote 시간 분리. | 큐 깊이 ≤5, 체크포인트와 겹침 금지. |
| 리전 지연 큼 | synchronous=FULL·busy_timeout↑, DB는 리전 내 볼륨. |
원격 볼륨 직링크 금지, rsync 후 로컬 링크. | 크로스 리전 빌드 1채널 또는 릴레이 전용 큐. |
출발점일 뿐입니다. p95 빌드·수동 wal_checkpoint 정지 시간·디스크 곡선으로 조율하세요.
실행 가능한 PRAGMA·journal_mode 권장
연결 직후 1회. 공유 볼륨이 불안정하면 synchronous를 올리고 빌드 병렬을 줄이세요.
-- 연결 후 1회(예: sqlite3 /path/to/meta.db) PRAGMA journal_mode=WAL; PRAGMA synchronous=NORMAL; -- 신뢰도 필요 시 FULL PRAGMA wal_autocheckpoint=1000; -- 페이지 단위; 빌드 피크엔 500~2000 사이에서 조율 PRAGMA busy_timeout=8000; -- ms; 락 경합 시 재시도 PRAGMA foreign_keys=ON; PRAGMA temp_store=FILE; -- 대용량 정렬 시 메모리 압박 완화(경로는 로컬 디스크 권장)
주의: journal_mode=WAL 전환은 락이 걸리니 피크와 분리하세요. 배포 후 PRAGMA journal_mode;로 확인. 단일 작성자엔 DELETE A/B도 검토.
큐 동시성 상한(운영 가이드)
공유 DB 쓰기자는 1. 16GB Mac: 무거운 동시 빌드 기본 2(스왑 보이면 1). 24GB+: 3–4 시험. WAL·DerivedData·rsync가 같은 디스크면 그중 최소가 상한. max_parallel은 DB 일관성을 보장하지 않으니 메타 쓰기는 flock·단일 promote와 짝지으세요.
1TB / 2TB 디스크 수위 검수 체크리스트
| 볼륨 사용률(APFS) | 1TB 플랜 조치 | 2TB 플랜 조치 | 큐·WAL 연동 |
|---|---|---|---|
| < 70% | 정상 운영, 주간 WAL 크기·*.wal 상한 모니터링. |
병렬 빌드·체크포인트 여유 확보. | 기본 큐 상한 유지, 스로틀 알람만. |
| 70% – 80% | 노란 경보: 아카이브·캐시 정리, 공유 DB 밤 VACUUM 검토. | WAL 파일 주기적 truncate·수동 checkpoint 윈도우 지정. | 동시 빌드 1단계 감축, 체크포인트와 겹치는 job 이동. |
| 80% – 90% | 2TB 승격 또는 콜드 데이터 외부 이전 우선. | 신규 rsync·대형 아티팩트 job 일시 중단. | wal_autocheckpoint 하향·직렬 큐로 전환. |
| > 90% | 하드 스톱: 신규 쓰기·대형 빌드 중단, 스냅샷·캐시 해제 후 수동 checkpoint·여유 확인까지 재개 금지. | 전 큐 drain, DB는 읽기 전용 failover만 허용. | |
검수: *.wal/*.shm 추이·p95 빌드·busy_timeout·락 경합·노드별 최저 여유. 알람은 최악 노드 기준.
자주 묻는 질문
DELETE가 나을 때? 단일 작성자·짧은 트랜잭션·높은 NFS 지연에서 체크포인트 지터가 크면. 전환 전 백업·드라이런.
수동 checkpoint? 한가할 때 wal_checkpoint(PASSIVE)부터. TRUNCATE는 정지가 있으니 빌드와 분리.
Postgres? 지연·연결·운영 비용이 달라집니다. 다중 클라이언트 단일 파일 쓰기는 여전히 피하세요.
플랜을 맞추고 운영 체크리스트를 함께 정리하기
용량·리전을 바꾸기 전 요금제를 팀과 맞추고, 이슈는 도움말로 모아 두면 온콜이 빨라집니다.