IL-0553 CircleCI · 2026-10-06database
워크플로 조율 서비스의 데이터베이스에서 트랜잭션 로그 볼륨이 차서 CircleCI 파이프라인과 잡이 멈추고 몇 시간 동안 늦게 시작했다
CircleCI 의 워크플로 조율 서비스는 모든 파이프라인, 워크플로, 잡의 상태를 추적하고 준비된 잡을 실행 플릿에 넘긴다. UI 에 보이는 잡 데이터와 작업이 끝났을 때 보내는 알림과 커밋 상태도 이 서비스가 만든다. 이 서비스의 상태를 담는 데이터베이스는 모든 변경을 전용 저장 볼륨의 트랜잭션 로그에 먼저 쓰고 그 로그를 계속 보관 처리해 공간을 다시 쓴다. 보관 처리가 밀려 볼륨이 차면 데이터베이스는 쓰기를 받지 않는다. 데이터베이스는 테이블마다 내부 기록을 유효하게 유지하는 autovacuum 유지 보수 작업을 주기적으로 돌리는데, 아주 큰 테이블에서는 이 작업이 테이블의 모든 페이지를 읽고 트랜잭션 로그를 대량으로 쓴다.
2026년 10월 6일 12시 40분쯤 가장 큰 테이블 몇 개의 autovacuum 이 트랜잭션 로그를 보관 처리 속도보다 빠르게 쓰기 시작했고 로그 볼륨이 차오르기 시작했다. 엔지니어들은 10시 2분부터 울리던 짧은 오류 알림을 전에도 본 비슷한 알림으로 보고 런북대로 대응했다. 13시 30분부터 조율 서비스가 느려지고 여러 서비스의 알림이 함께 울렸으며, 14시 54분에 장애를 선언했다. 엔지니어들은 느려진 원인이 anti-wraparound autovacuum 이라는 것을 찾아냈다. 이 작업은 취소하면 데이터베이스가 자동으로 다시 시작하기 때문에, 엔지니어들은 작업이 빨리 끝나도록 설정을 바꿨다.
15시 43분에 트랜잭션 로그 볼륨이 거의 찼다. 데이터베이스가 읽기 전용이 되는 것을 막으려고 엔지니어들은 로그를 여유 공간이 많은 데이터베이스의 주 저장 볼륨으로 옮기기로 했다. 옮기는 동안 데이터베이스가 내려가야 했고, 15시 48분부터 16시 38분까지 50분 동안 조율 서비스가 아무 작업도 처리하지 못했다. 엔지니어들은 그동안 대체 데이터베이스를 준비했지만 원래 데이터베이스가 먼저 돌아와 그대로 썼다. 로그와 일반 데이터가 같은 저장소를 쓰게 되자 데이터베이스는 평소의 절반쯤 되는 속도로 작업을 처리했다. 엔지니어들은 유지 보수 작업이 더 시작되지 않도록 데이터베이스 파라미터를 바꿨고, 데이터 손실 위험을 안고 옮겨 갈 수 있는 서비스 전체 스택도 준비했지만 옮기지 않기로 했다.
18시 19분에 엔지니어들이 쓰기마다 저장소를 기다리는 시간을 줄이는 데이터베이스 설정을 바꾸자 처리 속도가 돌아왔다. 잡을 실행 플릿에 넘기는 시스템에 데이터베이스와 서버 용량을 더해 밀린 작업을 빨리 처리했고, 19시 55분쯤 새 잡이 제때 시작했다. 밀린 작업이 실행 플릿에 몰려 일부 Docker 잡이 용량이 늘 때까지 기다렸고, 20시 30분에 잡 시작 시간이 정상으로 돌아왔다. 20시 32분에 상태 페이지 공지를 모니터링 단계로 바꾸고 21시 19분에 장애를 종료했다. 잡 3,500개쯤이 시작하지 못했고, CircleCI 는 어떤 잡도 두 번 실행한 증거를 찾지 못했다.
- 심각도
- –
- 영향 범위
- Creating pipelines and starting workflows and jobs on CircleCI was delayed from 15:30 to 20:30 UTC and stopped from 15:48 to 16:38 UTC; pipelines triggered from 16:02 UTC failed; UI data, notifications and commit status updates were delayed; about 3,500 jobs failed to start
- 영향 사용자
- CircleCI customers
- 지역
- –
- 감지까지
- 5m
- 복구까지
- 7h
증상
2026년 10월 6일 13시 30분 UTC부터 CircleCI 의 워크플로 조율 서비스가 느려져 일부 파이프라인과 잡이 이따금 조금씩 늦게 시작했다. 15시 30분부터는 지연이 계속 이어졌고 일부 잡이 실패하기 시작했다.
그 전인 10시 2분부터 모니터링이 조율 서비스의 오류 알림을 짧게 여러 번 냈다. 알림은 매번 15분쯤 안에 저절로 풀렸다. 엔지니어들은 비슷한 짧은 알림을 전에도 봤고 다른 이상 신호도 없어서 매번 런북대로 대응했다. 알림을 덜 민감하게 만드는 작업도 시작했다.
13시 35분에 모니터링이 다시 알림을 냈고, 이번에는 여러 다른 서비스의 관련 알림이 함께 울렸다. 인프라 엔지니어들이 런북대로 일부 알림을 정리했지만 14시 30분쯤 알림이 다시 울렸고, 더 조사한 뒤 14시 54분에 장애를 선언했다.
15시 48분부터 16시 38분까지 조율 서비스는 어떤 작업도 처리하지 못했다. 고객은 파이프라인을 트리거할 수는 있었지만 워크플로와 잡은 하나도 시작되지 않았고, 16시 2분부터 새로 트리거한 파이프라인은 실패했다.
데이터베이스가 돌아온 16시 38분부터 18시 19분까지 조율 서비스는 평소의 절반쯤 되는 속도로 작업을 처리했다. 잡은 시작까지 수십 분을 기다렸고 가장 길게는 50분쯤 기다렸다. 상태 페이지는 시작 시간이 한때 평균 40분쯤까지 늘었고 아주 적은 수의 워크플로는 1시간 넘게 기다렸다고 적었다.
CircleCI UI 에 잡, 워크플로, 파이프라인 데이터가 나타나기까지 최대 15분이 걸렸다. 외부로 나가는 알림과 웹훅, 버전 관리 서비스로 보내는 커밋 상태 갱신도 늦어졌다. 알림과 웹훅은 19시쯤까지 보통 1분쯤 늦게 나갔다.
밀린 작업이 실행 플릿으로 넘어가자 19시 49분부터 20시 30분까지 큰 리소스 클래스의 Docker 잡이 용량이 늘어나는 동안 최대 10분쯤 기다렸다. 상태 페이지는 20시 5분쯤 대기 시간이 2xlarge gen2 에서 최대 8분쯤, xlarge gen2 에서 6분쯤, 다른 몇몇 리소스 클래스에서 5분 미만이었다고 적었다.
원인
- 촉발
- 10월 6일 12시 40분쯤 데이터베이스의 가장 큰 테이블 몇 개에서 돌던 정기 유지 보수 작업인 anti-wraparound autovacuum 이 평소 작업량과 겹치면서, 데이터베이스가 트랜잭션 로그를 보관 처리하는 속도보다 빠르게 로그를 썼다.
감지
10시 2분부터 모니터링이 조율 서비스의 오류 알림을 짧게 여러 번 냈지만 매번 저절로 풀렸다. 13시 35분에 여러 다른 서비스의 관련 알림과 함께 다시 울렸고, 14시 30분쯤 알림이 다시 울리자 더 조사한 뒤 14시 54분에 장애를 선언했다. 트랜잭션 로그 볼륨이 얼마나 찼는지와 보관 처리가 얼마나 밀렸는지를 보는 알림은 없었다. 상태 페이지에는 15시 58분에 공지를 올렸고 16시 20분에 주요 장애로 올렸다.
조치
- anti-wraparound autovacuum 이 빨리 끝나도록 설정을 바꿨다. 이 작업은 취소하면 데이터베이스가 자동으로 다시 시작하기 때문이었다.
- 트랜잭션 로그 볼륨이 거의 차자 데이터베이스가 읽기 전용이 되지 않도록 로그를 여유 공간이 많은 데이터베이스의 주 저장 볼륨으로 옮겼다. 옮기는 동안 데이터베이스가 50분 동안 내려갔다.
- 유지 보수 작업이 더 시작되지 않도록 데이터베이스 파라미터 몇 가지를 조사해 바꿨다.
- 18시 19분에 쓰기마다 저장소를 기다리는 시간을 줄이는 데이터베이스 설정을 바꿔 처리 속도를 되살렸다.
- 밀린 작업을 빨리 처리하려고 잡을 실행 플릿에 넘기는 시스템에 데이터베이스와 서버 용량을 더했다.
후속 조치
- 트랜잭션 로그 볼륨이 얼마나 찼는지와 보관 처리가 얼마나 밀렸는지에 알림을 건다.
- 이 두 상태를 일으키는 데이터베이스 유지 보수 작업에도 알림을 걸어 더 일찍 대응한다.
- 시끄럽거나 지나치게 민감한 알림이 실제 문제를 가리지 않도록 모든 알림을 다시 살핀다.
- 데이터베이스의 autovacuum 이 얼마나 자주, 얼마나 공격적으로 도는지를 조정한다.
- 큰 테이블들의 크기를 시간에 따라 추적해 안전한 한계 안에 두게 한다.
- 트랜잭션 로그 하나에 모든 쓰기가 몰리는 병목을 없앤다. 서비스를 각자 트랜잭션 로그를 가진 여러 데이터베이스 인스턴스로 나누는 방법과, 쓰기를 여러 노드에 나누는 분산 데이터베이스로 옮기는 방법을 검토한다.
- 다른 시스템들이 재시도 끝에 포기하지 않고 조율 서비스가 회복할 때까지 기다리도록 동작을 바꾼다.
- 긴 장애 동안 상태 페이지 공지가 구체적인 영향과 시각을 더 일찍 담도록 지침을 고친다.
교훈
CircleCI 는 여러 알림이 함께 울린 것을 더 일찍 알아챘어야 했다고 밝혔다. 모니터링은 느려진 것을 잡았지만 트랜잭션 로그 볼륨이 찬 정도와 보관 처리가 밀린 정도에는 알림이 없었다. 조율 서비스의 모든 쓰기가 데이터베이스 하나와 트랜잭션 로그 하나를 거치기 때문에, 그 로그가 밀리자 모든 파이프라인, 워크플로, 잡이 함께 느려졌다. 일부 잡은 다른 시스템들이 재시도 끝에 포기해서 실패했다. 고객들은 초기 상태 페이지 공지에 세부 내용이 부족했다고 알려 왔다.
출처
- https://status.circleci.com/incidents/z4hbq8h49j8c · official-status · 보관본
관련 사례
같은 원인 · 공통 데이터베이스, PostgreSQL vacuum
같은 원인 · 공통 데이터베이스, PostgreSQL vacuum
IL-0211Mandrill 의 PostgreSQL 샤드 하나가 트랜잭션 ID 랩어라운드를 막으려고 쓰기를 멈춰 약 40시간 동안 메일 발송이 줄었다Mailchimp · 2019같은 원인 · 공통 데이터베이스, PostgreSQL vacuum
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 CI 시스템
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0288CDN77 의 ClickHouse 데이터 파이프라인에서 이중화된 인스턴스 세 곳의 ZooKeeperWait 가 수천 초로 치솟아 복제가 한 시간 넘게 느려졌다CDN77 · 2026같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0305Intercom 의 PlanetScale 샤드 하나에서 복제본이 CPU 100% 로 주 데이터베이스를 따라가지 못해 받은편지함에 최대 2.2시간 전의 데이터가 보였다Intercom · 2026같은 원인 · 공통 데이터베이스
IL-0390PostHog US Cloud 의 Persons Postgres 데이터베이스 쓰기가 크게 느려져 이벤트와 persons 수집이 최대 2일 지연됐다PostHog · 2025같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0287Atlas 와 Cloud Manager 의 모니터링을 받치는 내부 데이터베이스 클러스터의 샤드 하나가 과부하되어 지표 수집과 클러스터 작업이 늦어졌다MongoDB · 2025같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0298Wikimedia sessionstore 의 Cassandra 노드가 디스크가 가득 차 잇따라 죽고 쿼럼을 잃어 편집이 실패했다Wikimedia Foundation · 2025같은 원인 · 공통 데이터베이스
IL-0312max_connections 를 올리려고 재시작한 주 PostgreSQL 데이터베이스가 다시 올라오지 않아 Gadget 의 모든 앱 요청이 멈췄다Gadget · 2024같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0110Grafana Agent 파드가 메모리를 많이 쓰던 노드에 Hangfire 파드가 함께 올라가 시스템 OOM 으로 CrashLoopBackOff 를 반복했고, 노드가 응답을 멈추고 NotReady 가 됐다.DFDS · 2024같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0202갑자기 몰린 쿼리와 데이터베이스 쓰기로 Honeycomb 수집 호스트가 메모리 부족으로 죽었고, 쿠버네티스 CrashLoopBackOff 가 용량 회복을 막아 US1 이벤트 수집이 한 시간 넘게 불안정했다Honeycomb · 2023 · sev1같은 원인 · 공통 데이터베이스
IL-0386Google Cloud 로 옮긴 뒤 GKE 노드에서 Postgres 연결 타임아웃과 memcached i/o timeout 이 간헐적으로 튀었다incident.io · 2023같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0206GKE 파드 안의 Consul 에이전트가 메모리 급증으로 거듭 OOM kill 되어 Rails 파드가 데이터베이스 복제본을 찾지 못했고, 모든 쿼리가 primary 로 몰려 GitLab.com 이 느려졌다.GitLab · 2022같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0496전역 복제 Cassandra 클러스터에서 모든 리전의 인스턴스 CPU 가 100% 로 치솟아 쿼리가 타임아웃됐고, 같은 부하가 이틀 저녁 더 찾아왔다Ably · 2020같은 원인 · 공통 데이터베이스
IL-0443Aurora MySQL reader 가 이유 없이 재시작한 뒤 writer 의 insert latency 가 7배쯤 오르고 replication lag 가 하루 넘게 이어졌다Repro · 2019같은 원인 · 공통 데이터베이스
IL-0002빌더 파드가 노드 한 대에 몰리자 kubelet 이 기본 API QPS 한도에 막혀 파드 상태를 늦게 갱신했고, CI 빌드가 AWS IAM 자격 증명을 받지 못해 실패했다Zalando · 2019같은 원인 · 공통 CI 시스템
IL-0401Kubernetes 프로젝트의 Prow 빌드 클러스터 노드가 GCP 디스크 IOPS 스로틀링에 걸려 테스트가 이상하게 실패하고 PR 머지가 몇 시간 멈췄다Kubernetes project · 2019같은 원인 · 공통 CI 시스템
IL-0037imagePullPolicy가 Always인 DaemonSet이 크래시 루프를 돌며 이미지를 계속 받아, NAT 세 대를 같이 쓰던 리전 전체가 이미지 레지스트리에서 429로 막혔다Datadog · 2019같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0064CPU 를 많이 쓰는 파드가 Google Cloud 노드 하나에 몰려 노드가 커널 패닉으로 죽었고, 다시 배치된 파드가 다음 노드를 또 죽이며 웹사이트와 API 가 멈췄다.Moonlight · 2019같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0334RDS MySQL 의 bookmarks 테이블이 2TB 파일 크기 한도에 닿아 INSERT 가 실패하고 Instapaper 가 31시간 동안 멈췄다Instapaper · 2017같은 원인 · 공통 데이터베이스
IL-0333사양을 낮춘 RDS PostgreSQL 인스턴스가 피크 부하를 못 버텨 헬스 체크가 실패하고 Buildkite 대시보드가 몇 시간 동안 내려갔다Buildkite · 2016같은 원인 · 공통 데이터베이스
IL-0282US-East 리전의 DynamoDB 스토리지 서버들이 멤버십 정보를 받지 못해 스스로 요청 처리에서 빠지면서 고객 요청의 약 55% 가 실패했다Amazon Web Services · 2015같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
내 클러스터에도 있는지 확인하기
AI 도구와 스크립트용
- 이 사례의 JSON: https://incidentlib-api.benchlet.com/cases/IL-0553
- 가장 비슷한 사례들: https://incidentlib-api.benchlet.com/cases/IL-0553/similar
- MCP 서버(Streamable HTTP, 키 없음):
https://incidentlib-mcp.benchlet.com/mcp
API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.