IL-0443 Repro · 2019-11-11databaseaws
Aurora MySQL reader 가 이유 없이 재시작한 뒤 writer 의 insert latency 가 7배쯤 오르고 replication lag 가 하루 넘게 이어졌다
Repro 는 Aurora MySQL 을 쓴다. 2019년 11월 reader 가 이유를 알 수 없이 재시작하고, 그 뒤 writer 의 insert latency 가 7배쯤 오르고 replication lag 가 커진 상태가 하루 넘게 이어지는 일이 두 번 있었다. 그동안 SDK 가 모은 데이터를 처리하는 애플리케이션이 지연됐고, 팀은 writer 성능이 돌아오기를 지켜보기만 했다.
AWS 지원팀이 내부 정보로 조사해 보니 reader 가 재시작하기 전까지 롤백 세그먼트 영역이 계속 늘었고, reader 가 재시작한 뒤에 해제가 시작됐다. 롤백 세그먼트는 레코드가 바뀔 때 롤백이나 다른 트랜잭션의 옛 데이터 읽기에 대비해 옛 정보를 남겨 두는 영역이다. 이 영역은 reader 의 트랜잭션이 길어져도 계속 늘 수 있다. 롤백 세그먼트는 11월 5일 10:16 JST 쯤부터 커졌고, reader 가 재시작한 11월 11일 19:20 JST 쯤 해제가 시작되어 11월 13일 14:31 JST 쯤 끝났다. AWS 지원팀은 커진 롤백 세그먼트를 해제하는 데 드는 I/O 가 커밋 레이턴시를 올린 것으로 봤고, 11월 5일 재시작 때도 같은 흐름이었다고 했다. 롤백 세그먼트는 DB 인스턴스가 아니라 클러스터 전체가 함께 쓴다. 그래서 인스턴스를 지우거나 더해도 해제를 앞당길 수 없었고, 미리 막는 것 말고는 할 수 있는 일이 없었다.
팀은 Datadog 의 mysql.innodb.history_list_length 로 롤백 세그먼트를 감시하는 모니터를 더했고, reader 가 재시작할 만큼 오래 도는 쿼리를 찾는 대로 kill 하게 했다. 그 뒤로는 같은 일을 미리 막을 수 있었다. 모니터를 둔 지 2년쯤 지나 알림이 거의 매주 울리자, 팀은 사내에 알린 뒤 max_execution_time 을 설정했다.
- 심각도
- –
- 영향 범위
- Writer performance of the Aurora MySQL cluster for a day or more after each reader restart; the applications processing data collected by the Repro SDK were delayed
- 영향 사용자
- –
- 지역
- –
- 감지까지
- –
- 복구까지
- –
증상
Aurora MySQL 의 reader 가 이유를 알 수 없이 재시작했다. 그 직후부터 writer 의 insert latency 가 7배쯤 오르는 등 writer 성능이 크게 떨어진 상태가 오래 이어졌다. 같은 일이 2019년 11월 두 주 사이에 두 번 일어났다.
writer 성능이 떨어진 동안 SDK 가 모은 데이터를 처리하는 애플리케이션이 지연됐다.
지표에는 매번 같은 모습이 나타났다. reader 가 재시작했고, 재시작 전에 freeable memory 가 빠르게 줄었다. mutex spin waits 는 크게 줄고 Rw-excl spin rounds 와 RW-excl spin waits 는 2배쯤 늘었다. commit latency 를 비롯한 latency 와 replication lag 가 오르고 volume read iops 가 늘었다. writer 지표는 reader 재시작 시점에 갑자기 바뀐 뒤 그 상태로 하루 넘게 이어졌고, 하루이틀 지나면 원래대로 돌아왔다.
팀은 가설을 하나 세웠다. reader 가 재시작해 buffer pool 이 비면서 DB 인스턴스와 클러스터 스토리지 사이의 네트워크 통신과 클러스터 스토리지의 IOPS 가 늘었고, 그것이 writer 에도 영향을 줬다는 가설이었다. 팀은 이 가설을 가지고 AWS 지원팀에 문의했다.
원인
- 촉발
- reader 에서 오래 도는 쿼리 때문에 롤백 세그먼트가 계속 커진 끝에 reader 가 재시작했다. 글쓴이는 그 쿼리가 Redash 에서 reader 로 보낸 것이었다고 기억한다.
감지
–
조치
- 팀은 writer 성능이 원래대로 돌아올 때까지 지켜보기만 했다.
후속 조치
- 롤백 세그먼트 길이를 Datadog 의 mysql.innodb.history_list_length 로 감시하는 모니터를 더했다.
- reader 가 재시작할 만큼 오래 도는 쿼리를 찾으면 바로 kill 하게 했다.
- 모니터 알림이 거의 매주 울리게 되자 사내에 알린 뒤 max_execution_time 을 설정해, 일정 시간이 지난 쿼리를 강제로 끝내게 했다.
교훈
롤백 세그먼트가 커지지 않도록 트랜잭션을 작게 해야 한다. 롤백 세그먼트는 클러스터 전체가 함께 쓰므로, 한번 커지면 인스턴스를 바꿔도 해제가 끝나기를 기다리는 수밖에 없다. 롤백 세그먼트 길이는 show engine innodb status 의 "History list length" 값으로 볼 수 있다.
출처
관련 사례
같은 원인 · 공통 데이터베이스 복제, 데이터베이스
IL-0288CDN77 의 ClickHouse 데이터 파이프라인에서 이중화된 인스턴스 세 곳의 ZooKeeperWait 가 수천 초로 치솟아 복제가 한 시간 넘게 느려졌다CDN77 · 2026같은 원인 · 공통 데이터베이스 복제, 데이터베이스
IL-0305Intercom 의 PlanetScale 샤드 하나에서 복제본이 CPU 100% 로 주 데이터베이스를 따라가지 못해 받은편지함에 최대 2.2시간 전의 데이터가 보였다Intercom · 2026같은 원인 · 공통 데이터베이스 복제, 데이터베이스
IL-0334RDS MySQL 의 bookmarks 테이블이 2TB 파일 크기 한도에 닿아 INSERT 가 실패하고 Instapaper 가 31시간 동안 멈췄다Instapaper · 2017같은 원인 · 공통 데이터베이스 복제, 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
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-0037imagePullPolicy가 Always인 DaemonSet이 크래시 루프를 돌며 이미지를 계속 받아, NAT 세 대를 같이 쓰던 리전 전체가 이미지 레지스트리에서 429로 막혔다Datadog · 2019같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0211Mandrill 의 PostgreSQL 샤드 하나가 트랜잭션 ID 랩어라운드를 막으려고 쓰기를 멈춰 약 40시간 동안 메일 발송이 줄었다Mailchimp · 2019같은 원인 · 공통 데이터베이스
IL-0064CPU 를 많이 쓰는 파드가 Google Cloud 노드 하나에 몰려 노드가 커널 패닉으로 죽었고, 다시 배치된 파드가 다음 노드를 또 죽이며 웹사이트와 API 가 멈췄다.Moonlight · 2019같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
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-0443
- 가장 비슷한 사례들: https://incidentlib-api.benchlet.com/cases/IL-0443/similar
- MCP 서버(Streamable HTTP, 키 없음):
https://incidentlib-mcp.benchlet.com/mcp
API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.