Incident Library

IL-0547 Buildkite · 2025-11-10database

Buildkite 의 Agent API, REST API, GraphQL 이 annotations 테이블 쿼리 타임아웃으로 4시간 가까이 저하됐다

2025년 11월 10일 04:48 UTC 에 Buildkite 는 Pipelines 제품의 annotations 를 저장하는 테이블에서 인덱스 하나를 지우는 데이터베이스 마이그레이션을 적용했다. 지운 인덱스를 대신할 인덱스가 이미 있었지만, 트래픽이 많은 소수의 쿼리가 예상과 달리 새 인덱스를 타지 않았다. 데이터베이스 마이그레이션은 모든 샤드에 동시에 적용된다.

04:53 UTC 에 annotations 테이블 쿼리의 타임아웃이 감지됐다. 타임아웃 난 쿼리 다수는 에이전트가 새 annotation 을 만드는 명령에서 나왔다. 이 쿼리들 때문에 영향을 받은 데이터베이스의 CPU 부하가 크게 올랐고 Pipelines 의 모든 기능이 느려졌다. 팀은 바로 지운 인덱스를 다시 만들기 시작해 05:30 UTC 까지 데이터베이스 샤드의 절반쯤에서 끝냈고, 서비스 일부가 돌아왔다. 나머지 샤드에서는 annotations 테이블로 계속 들어오는 쿼리 부하 때문에 인덱스를 효율적으로 다시 만들 수 없었다.

팀은 여럿으로 나뉘어 부하를 줄일 방법을 찾았다. 제품에서 annotation 기능을 끄는 방법, 새 annotation 을 다른 테이블로 보내는 방법, 테이블 수준 권한으로 annotations 테이블을 막는 방법을 살폈다. 가장 깔끔하고 효율적인 방법은 애플리케이션 사용자의 annotations 테이블 읽기·쓰기 권한을 잠시 빼는 것이었다. 여기에 Postgres 의 max_parallel_maintenance_workers 를 늘려 인덱스 생성 속도를 크게 올렸다. 07:50 UTC 부터 08:43 UTC 까지 읽기·쓰기 권한을 뺀 상태에서 나머지 샤드의 인덱스를 다시 만들었고, Agent API, REST API, GraphQL 의 지연과 오류율이 평소 수준으로 돌아왔다. 장애로 일관되지 않은 상태가 된 일부 에이전트와 잡은 이어진 4시간 동안 풀어 주고 정리했으며, 손으로 해야 했던 작업은 11:56 UTC 에 끝났다.

심각도
–
영향 범위
Agent API severely degraded for most customers from 04:48 to 05:30 UTC and for some until 08:43 UTC; REST API, GraphQL and Web UI degraded from 04:48 to 08:43 UTC; some agents and jobs left inconsistent until 11:56 UTC
영향 사용자
Most Buildkite customers
지역
–
감지까지
5m
복구까지
3h 55m

증상

2025년 11월 10일 04:48 UTC 부터 Buildkite 의 Agent API 가 대부분의 고객에게 심하게 저하됐고, REST API, GraphQL, Web UI 도 오류율이 오르고 느려졌다.

04:53 UTC 에 annotations 테이블의 쿼리가 타임아웃 나는 것이 보였다. 타임아웃 난 쿼리 가운데 다수는 에이전트가 새 annotation 을 만드는 명령에서 나왔다. 이 쿼리들 때문에 영향을 받은 데이터베이스의 CPU 부하가 크게 올라 Pipelines 의 모든 기능이 느려졌다.

상태 페이지에는 05:22 UTC 에 빌드 annotation 표시에 문제가 있어 웹 UI 에서 빌드를 보는 데 영향이 있을 수 있다는 글이 먼저 올라왔다. 05:30 UTC 에는 REST API, GraphQL API, Web UI 의 오류율 증가와 느린 성능을 알렸다.

05:30 UTC 까지 데이터베이스 샤드의 절반쯤에서 인덱스를 다시 만들어 서비스 일부가 돌아왔다. 나머지 샤드에서는 annotations 테이블로 계속 들어오는 쿼리 부하 때문에 인덱스를 효율적으로 다시 만들 수 없었고, 일부 고객의 Agent API 저하와 REST API, GraphQL 저하는 08:43 UTC 까지 이어졌다.

장애 뒤 일부 에이전트와 잡이 일관되지 않은 상태로 남았다. 스스로 회복하지 못한 경우는 손으로 처리했고 11:56 UTC 에 끝났다.

증상 간헐적 타임아웃데이터베이스 과부하오류율 상승지연 시간 증가

원인

촉발
2025년 11월 10일 04:48 UTC 에 Pipelines 제품의 annotations 를 저장하는 테이블에서 인덱스 하나를 지우는 데이터베이스 마이그레이션이 적용됐다. 대신할 인덱스가 이미 있었지만 트래픽이 많은 일부 쿼리가 새 인덱스를 타지 않았다.

감지

04:53 UTC 에 annotations 테이블 쿼리의 타임아웃으로 인덱스 삭제의 영향이 감지됐다.

조치

후속 조치

교훈

Buildkite 는 이 장애가 주로 데이터베이스 마이그레이션 하나에서 비롯됐고, 그 마이그레이션이 검토 과정의 빈틈을 드러냈다고 밝혔다.

출처

관련 사례

내 클러스터에도 있는지 확인하기

kubegap 은 Claude Code 나 Codex 에서 쿠버네티스 클러스터를 읽기만 하며 이 사례와 같은 상태를 점검합니다. 이 사례의 구성 요소: 데이터베이스. 점검 항목의 근거는 이 사례 같은 공개 보고서입니다.

AI 도구와 스크립트용

API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.