피드로 돌아가기
Dev.toDatabase
원문 읽기
Zero Downtime 달성을 위한 점진적 Database Migration 전략
Database Migration Strategies That Actually Work in Production
AI 요약
Context
대규모 데이터셋이 포함된 Production 환경에서 단순 DDL 실행 시 발생하는 Table Lock으로 인한 서비스 중단 위험 존재. 수천만 건 이상의 Row를 가진 테이블에 Index 추가나 Column 변경 시 발생하는 Write Blocking 현상을 해결해야 하는 상황.
Technical Solution
- Expanding-Contract Pattern 적용을 통한 Schema 변경 단계 분리 및 서비스 가용성 확보
- Batch 기반의 Data Backfill 수행과 pg_sleep(0.1s) 삽입을 통한 Lock Contention 최소화
- CREATE INDEX CONCURRENTLY 사용 및 disable_ddl_transaction! 설정을 통한 Non-blocking Index 생성
- SET lock_timeout = '2s' 설정을 통해 Migration 요청이 대기열을 점유하여 발생하는 시스템 전체 행(Hang) 현상 방지
- Column Rename 시 '신규 컬럼 생성 $\rightarrow$ Double Write $\rightarrow$ Backfill $\rightarrow$ Read 전환 $\rightarrow$ 구 컬럼 삭제'의 4단계 파이프라인 설계
- pg_repack을 활용한 Table Bloat 제거 및 Zero-lock으로 인한 스토리지 최적화
실천 포인트
1. Production 규모 데이터셋 기반의 Staging 테스트 수행
2. EXPLAIN ANALYZE를 통한 Lock 지속 시간 예측
3. CREATE INDEX CONCURRENTLY 사용 및 트랜잭션 제외 설정 확인
4. 2초 이내의 짧은 lock_timeout 설정 적용
5. 1% Canary 배포 후 점진적 롤아웃 및 자동 롤백 임계치 설정