IL-0327 CircleCI · 2025-04-03database
워크플로 데이터베이스를 blue/green 으로 업그레이드한 뒤 워크플로 시작과 취소가 지연되고 실패했다
2025-04-03 22:08 UTC 부터 23:45 UTC 까지 CircleCI 고객은 워크플로와 작업을 시작하고 취소할 때 지연과 일부 실패를 겪었고 UI 에서 워크플로를 보기 어려웠다. 22:00 무렵 워크플로 서비스의 데이터베이스를 blue/green 배포로 업그레이드했다. 팀은 90초 미만의 지연 동안 데이터베이스 호출이 큐에서 10분 동안 재시도될 것으로 예상했다. 22:08 에 전환이 끝나고 쿼리가 처리되는 것을 확인했지만, 22:17 에 지연이 커지고 10분 재시도를 다 쓴 작업이 버려졌다.
22:30 에 워크플로 파드를 재시작해 모든 파드가 올바른 데이터베이스에 연결하게 했다. 22:35 에 공개 장애를 선언했다. 22:41 에 새 데이터베이스의 모든 쿼리가 디스크에서 읽히는 것을 보고 통계 테이블이 갱신되지 않았다고 판단했다. 팀은 곧바로 데이터베이스를 키우고 업무에 꼭 필요하지 않은 데이터베이스 작업을 껐다. 23:00 에 통계 테이블을 다시 만드는 동안 데이터베이스가 회복할 여유를 주려고 워크플로 서비스를 파드 하나로 줄였지만 성능은 나아지지 않았다. 23:19 에 옛 데이터베이스의 쓰기를 다시 켜고 옛 데이터베이스를 다시 주 데이터베이스로 되돌리기로 했다. 이 작업은 23:29 에 끝났다. 23:45 에 워크플로 큐가 정상 수준으로 돌아왔고 더 이상 오류가 보이지 않았다.
장애 뒤 조사에서 근본 원인이 밝혀졌다. 인덱스에 쓰이는 통계 테이블을 다시 만드는 analyze 작업이 너무 일찍 실행됐고, 같은 배포 안의 두 번째 메이저 버전 업그레이드가 그 통계를 다시 낡게 만들었다.
- 심각도
- –
- 영향 범위
- Starting and cancelling workflows and jobs had increased latency and some failures, and workflows were slow or hard to view in the UI, from 22:08 to 23:45 UTC
- 영향 사용자
- CircleCI customers
- 지역
- –
- 감지까지
- 9m
- 복구까지
- 1h 37m
증상
blue/green 전환은 22:08 UTC 에 끝났다. 22:17 에 워크플로 서비스의 지연이 커졌고, 10분 재시도를 다 쓴 작업이 버려지며 오류가 났다. 고객은 워크플로와 작업을 시작하거나 취소할 때 지연과 실패를 겪었고 UI 에서 워크플로를 보기 어려웠다.
팀은 업그레이드 중 90초 미만의 짧은 지연을 예상했다. 그동안 워크플로 서비스의 데이터베이스 호출이 큐로 가서 10분 동안 재시도되고, 큐는 업그레이드 중과 직후에 조금만 늘 것으로 봤다. 22:08 에 전환이 끝난 뒤 쿼리가 처리되는 것도 확인했다.
22:30 에 모든 파드가 올바른 데이터베이스에 연결하는지 확인하려고 워크플로 파드를 재시작했다. 22:41 에 새 데이터베이스의 모든 쿼리가 디스크에서 읽히는 것을 보고 데이터베이스 통계 테이블이 갱신되지 않았다고 판단했다.
23:00 에 워크플로 서비스를 파드 하나로 줄이자 예상대로 워크플로 큐가 쌓였지만 데이터베이스 성능은 나아지지 않았다.
원인
원인 배포 결함
- 촉발
- 22:00 UTC 무렵 워크플로를 맡는 서비스의 데이터베이스를 blue/green 배포로 업그레이드했고, 22:08 에 전환이 끝났다.
감지
22:17 UTC 에 워크플로 서비스의 지연이 커지고 10분 재시도를 다 쓴 작업이 버려지며 오류가 나는 것을 확인했다.
조치
- 22:30 UTC 에 모든 워크플로 파드가 올바른 데이터베이스에 연결하도록 파드를 재시작했다.
- 22:41 에 새 데이터베이스의 모든 쿼리가 디스크에서 읽히는 것을 보고 곧바로 데이터베이스 크기를 키우고 업무에 꼭 필요하지 않은 데이터베이스 작업을 껐다.
- 23:00 에 통계 테이블을 다시 만드는 동안 데이터베이스가 회복할 여유를 주려고 워크플로 서비스를 파드 하나로 줄였다.
- 23:19 에 옛 데이터베이스의 쓰기를 다시 켜고 옛 데이터베이스를 다시 주 데이터베이스로 되돌리기로 했다. 이 작업은 23:29 에 끝났다.
후속 조치
- blue/green 데이터베이스 배포 절차에서 메이저 버전이 바뀔 때마다 analyze 절차를 돌리도록 바꿨다.
- 부하가 걸린 데이터베이스에서 analyze 명령을 돌려도 성능이 더 나빠지지 않는다는 것을 시험으로 확인했다. 앞으로 복구할 때 참고하도록 이 결과를 적어 둔다.
- 다음 마이그레이션 전에 자동 테스트와 수동 확인 지점을 절차 곳곳에 더해 blue/green 전환 전에 문제를 찾아 해결한다.
교훈
–
출처
- https://discuss.circleci.com/t/post-incident-report-april-4-2025-delays-in-starting-workflows/53113 · blog · 보관본
참고 문서
관련 사례
같은 원인 · 공통 데이터베이스
IL-0136Sweden Central 리전에서 내부 서비스 배포가 캐시를 비워 메타데이터 백엔드에 평소 20배의 트래픽이 몰렸고, 데이터베이스 연결에 기대는 헬스 체크가 인스턴스를 계속 재시작시켜 Azure OpenAI 요청이 6시간 가까이 실패했다Microsoft Azure · 2026같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0510MIT Learn 운영 RDS PostgreSQL 의 저장 공간이 임시 파일로 가득 차 learn.mit.edu 가 세 시간 동안 503 과 504 를 냈다MIT Open Learning · 2026같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0547Buildkite 의 Agent API, REST API, GraphQL 이 annotations 테이블 쿼리 타임아웃으로 4시간 가까이 저하됐다Buildkite · 2025같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0324External Storage 데이터베이스 클러스터에 과부하가 걸려 mw-api-int, mw-parsoid, mw-jobrunner 의 지연과 데이터베이스 오류가 늘었다Wikimedia Foundation · 2025같은 원인 · 공통 데이터베이스
IL-0307Supabase us-east-1 에서 Supavisor 2.0 업그레이드 뒤 Postgres 연결 풀러가 테넌트 약 80% 의 연결을 끊었다Supabase · 2025같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0523TANF-app 의 운영 배포가 PostgreSQL 마이그레이션 실패로 두 달 동안 막힘U.S. Department of Health and Human Services · 2023같은 원인 · 공통 데이터베이스
IL-0567쿠키런: 오븐브레이크의 패키지 매출 랭킹 기능을 배포한 뒤 Aurora MySQL CPU가 100%에 이르러 유저가 게임에 접속하지 못했다Devsisters · 2023같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0524인덱스를 다시 만드는 마이그레이션이 운영에서 Transactions 테이블을 잠가 Open Collective 서비스가 느려짐Open Collective · 2023같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
내 클러스터에도 있는지 확인하기
AI 도구와 스크립트용
- 이 사례의 JSON: https://incidentlib-api.benchlet.com/cases/IL-0327
- 가장 비슷한 사례들: https://incidentlib-api.benchlet.com/cases/IL-0327/similar
- MCP 서버(Streamable HTTP, 키 없음):
https://incidentlib-mcp.benchlet.com/mcp
API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.