Incident Library

IL-0329 incident.io · 2025-04-09database

Postgres 17 업그레이드 뒤 다시 켠 PGAudit 가 마이그레이션 중 락을 쥔 채 멈춰, 서비스 전반이 느려지고 데이터베이스가 2분 동안 내려갔다

incident.io 는 2025년 4월 9일 직전 주말에 데이터베이스를 Postgres 17 로 업그레이드했다. 업그레이드하는 동안 PGAudit 를 잠시 껐다. PGAudit 는 데이터베이스 활동과 데이터베이스 구조, 사용자 권한의 변경을 표준 Postgres 로그보다 자세히 남기는 확장이다. 업그레이드가 끝난 뒤 스테이징에서 시험이 통과하자 운영에서도 PGAudit 를 다시 켰고, 정상 동작을 확인했다.

4월 9일 14:16 UTC 에 빈 테이블을 만들고 인덱스를 더하는 평범한 마이그레이션이 PGAudit 와 예상하지 못한 방식으로 얽혔다. PGAudit 는 중요한 데이터베이스 락을 쥔 채 응답하지 않게 됐다. 엔지니어들은 PGAudit 프로세스를 죽이려 했지만 프로세스가 타임아웃 시그널에 반응하지 않았다. 락이 풀리지 않아 다른 데이터베이스 작업이 막혔다. 대시보드, 모바일 앱, Slack 앱, API 가 간헐적으로 느려졌다.

타임아웃이 계속 늘자 팀은 데이터베이스를 재시작하기로 했다. 재시작하면 멈춘 프로세스가 강제로 끝나지만 데이터베이스도 잠깐 완전히 내려간다. 팀은 혼란이 더 이어지는 위험보다 먼저 손을 쓰는 쪽을 골랐다. 주 데이터베이스는 14:25 부터 14:27 UTC 까지 2분이 조금 안 되게 내려갔다. 인프라의 핵심 부분이 이런 상황을 견디도록 설계돼 있어 그동안에도 온콜 알림과 에스컬레이션은 빠지지 않았다. 복구 뒤 팀은 PGAudit 를 껐다가 완전히 지웠다.

심각도
–
영향 범위
Intermittent slowness and timeouts across the dashboard, mobile app, Slack app and API from 14:16 to 14:27 UTC, including a primary database outage of just under 2 minutes; on-call alerts and escalations kept working
영향 사용자
–
지역
–
감지까지
–
복구까지
11m

증상

2025년 4월 9일 14:16 UTC 부터 대시보드, 모바일 앱, Slack 앱, API 가 간헐적으로 느려졌고, 모니터링이 곧 문제를 알렸다. 14:25 부터 14:27 UTC 까지 2분 동안은 데이터베이스가 완전히 내려가 제품 전체가 영향을 받았다.

빈 테이블을 만들고 인덱스를 더하는 평범한 마이그레이션이 돌던 중 PGAudit 프로세스가 응답하지 않게 됐다. 이 프로세스는 중요한 데이터베이스 락을 쥐고 놓지 않았다. 락이 걸린 자원 때문에 다른 데이터베이스 작업이 줄줄이 막혔다.

타임아웃은 시간이 갈수록 늘었다. 엔지니어들은 처음에 문제의 PGAudit 프로세스를 죽이려 했지만, 프로세스가 타임아웃 시그널에 반응하지 않아 락이 풀리지 않았다. 몇 번을 더 시도해도 프로세스는 끝나지 않았다.

이 기간에도 온콜 알림과 에스컬레이션은 하나도 빠지지 않고 동작했다.

증상 잠금 경합과 교착간헐적 타임아웃지연 시간 증가서비스 중단

원인

원인 소프트웨어 결함

구성 요소 데이터베이스
기여 요인 –
촉발
PGAudit 를 다시 켠 운영 데이터베이스에서 빈 테이블을 만들고 인덱스를 더하는 평범한 마이그레이션을 14:16 UTC 에 실행했다.

감지

모니터링이 문제를 빠르게 알렸다.

조치

후속 조치

교훈

–

출처

관련 사례

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

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

AI 도구와 스크립트용

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