피드로 돌아가기
Dev.toDatabase
원문 읽기
p99 Latency 30초 폭증을 해결하는 DB Locking 전략과 Sharding 설계
DB Locking 101 for Serverless Devs
AI 요약
Context
Serverless 환경에서 대규모 동시 요청 발생 시 Row-level Lock으로 인한 요청 큐 적체 현상 분석. 단순 UPDATE 문 실행만으로도 배타적 잠금이 발생하여 p99 Latency가 50ms에서 30초로 급증하는 병목 지점 확인.
Technical Solution
- Optimistic Locking 도입을 통한 Lock-free 읽기 구현 및 Version 컬럼 기반의 쓰기 충돌 검증
- 재시도 루프를 결합한 Optimistic 전략으로 대기 시간을 빠른 재시도 주기로 전환하여 처리량 개선
- 높은 경합이 예상되는 Hot Row에 대해 N개의 인벤토리 로우로 분산하는 Sharding 기법 적용
- 트랜잭션 내 외부 API 호출 등 비용 높은 작업 발생 시 SELECT FOR UPDATE를 통한 Pessimistic Locking으로 중복 작업 방지
- 대량의 백그라운드 작업 처리를 위해 SKIP LOCKED 옵션을 활용한 Queue 시맨틱 구조 설계
실천 포인트
1. 기본 CRUD는 Read Committed 수준의 격리 레벨 유지
2. 동시 쓰기 경합 발생 시 Version 컬럼 기반 Optimistic Locking 우선 적용
3. 외부 Side-effect가 포함된 고비용 트랜잭션은 SELECT FOR UPDATE로 원자성 보장
4. 극심한 Hot Row 경합은 데이터 분산(Sharding)을 통해 Lock 큐 분산