피드로 돌아가기
Recovering a status page from a half-finished schema migration
Dev.toDev.to
Database

OOMKilled로 인한 Partial Migration 장애 해결 및 스냅샷 전략 수립

Recovering a status page from a half-finished schema migration

Muhammad Hassaan Javed2026년 6월 22일10intermediate

Context

Schema Migration 도중 Migration Job이 OOMKilled되어 DB 상태가 불완전하게 남은 상황임. Migration Library가 DDL 실행 전 Version Row를 먼저 업데이트하는 Split-transaction 구조를 채택하여 Application Binary와 DB Schema 간의 버전 불일치 발생.

Technical Solution

  • Helm Rollback 시도 결과 구버전과 신버전 Binary 모두 DB 상태를 인식하지 못하는 Symmetry Error 확인으로 DB 상태 오염 판단
  • schema_migrations 테이블의 dirty flag 기반으로 Migration 중단 시점 식별 및 실제 DDL 적용 여부 교차 검증
  • 6시간 전의 pg_basebackup 복구 시 데이터 손실 위험 및 PITR 미검증으로 인해 수동 복구 경로 선택
  • Migration 파일 내 SQL 문을 분석하여 미적용된 DDL(Severity Column 추가, FK 설정, Partial Index 생성)을 수동으로 반영
  • 단순 데이터 백업과 별개로 Migration 직전 Schema Snapshot을 생성하는 프로세스를 도입하여 구조적 복구 지점 확보

- Migration Library가 DDL과 Version Row 업데이트를 단일 Transaction으로 묶어 처리하는지 검증 - DB 규모와 상관없이 Migration 직전 Schema Snapshot 생성 공정을 파이프라인에 추가 - PITR(Point-In-Time Recovery) 설정 여부를 넘어 실제 복구 가능성을 주기적으로 테스트 - CrashLoopBackOff 발생 시 Binary 버전과 DB Schema 버전의 일치 여부를 먼저 확인하고, Rollback 실패 시 DB Partial Migration 가능성 고려

원문 읽기