Cases3 cases
1 to 3 of 3
IL-0447An every RDS for MySQL instance slowed badly when its gp2 EBS BurstBalance ran out and IOPS fell to the baselineevery2024- Symptoms
The BurstBalance of an RDS instance began to fall rapidly and finally ran out, and the database's performance dropped sharply. The instance ran MySQL 5.7.44 on db.t3.medium with general purpose SSD (gp2) storage of 30GiB.
- Trigger
A complex SELECT query began writing large amounts of data to temporary tables, which raised WriteIOPS and used up the burst credits.
- Root cause
- Component
- Contributing factor
- Action items
- Consider tuning the query by reviewing indexes and rewriting it
- Consider moving the storage from gp2 to gp3 or increasing its size to raise the baseline IOPS
- Consider adjusting tmp_table_size and max_heap_table_size
- Consider moving to a more powerful instance type
- Consider monitoring BurstBalance with CloudWatch alerts and adding external monitoring such as Pingdom
- Lessons
A complex query can have a large effect on I/O, so database design and queries need continuous improvement, and query performance needs regular monitoring.
IL-0488Kit's RDS MySQL write latency rose 100x and running threads jumped from 9 to 900, backing up Sidekiq job queuesKit2022- Symptoms
At 5:20 am EST on December 24, 2022, Kit's infrastructure team got its first page because the number of MySQL threads running on its RDS MySQL primary in us-east-2 had jumped 100x, from 9 to 900, at a time of day when Kit's traffic is very low. Sidekiq queues were backing up.
- Trigger
An EBS interruption on the standby of the Multi-AZ RDS instance, reported by AWS as an LSE at 02:12:47 UTC on 2022-12-24, started a replaceSecondaryHostAndVolumesTask that replaced the secondary host and volumes.
- Root cause
- Component
- Contributing factor
- Detection
A page fired at 5:20 am EST because MySQL threads running jumped from 9 to 900. An AWS RSS feed alert in Slack about degraded EC2 and EBS in use2-az1 had arrived the evening before and was not acted on.
- Remediation
- Scaled the RDS storage from 12.5 TB to 13.75 TB, which put the instance through "optimizing storage" and brought write latency back to 1-2 ms
- Lessons
Multi-AZ RDS keeps data consistent and durable, but synchronous replication means each write also waits for the standby, so a degraded EBS volume on the standby while it is being replaced slows writes on the primary. Large databases recover more slowly from such events than small ones. A single-AZ instance would not have been hit by a standby problem, but would have suffered hours of downtime if its own zone failed, and that trade-off has to be weighed when deploying production RDS instances.
- Symptoms
On 30 May 2019, in the run-up to the Kubernetes 1.15 code freeze, Prow test jobs in the k8s-prow-build cluster failed in surprising ways or were aborted partway through. Jobs were reported to GitHub as failed while Deck still showed them as running, because pods exited without uploading `finished.json`, the file most Prow tooling uses to tell a job's state.
- Trigger
A spike in test load before the Kubernetes 1.15 code freeze pushed disk I/O on the build nodes far beyond the IOPS that GCP allows for 250 GB disks.
- Root cause
- Component
- Contributing factor
- Detection
Several users reported jobs that GitHub showed as failed but Deck showed as still running, and the first report came on Slack at 13:26. Alerting for these failures did not exist or did not work.
- Remediation
- Requested and received additional disk quota
- Brought up 55 nodes with 500 GB disks in a new node pool
- Migrated all nodes from the 250 GB disk pool to the 500 GB disk pool by draining old nodes, finishing at 23:55
- Action items
- Create or fix monitoring so the oncall is paged when tide stops doing things
- Set a process and guidelines for adding new members to the oncall rotation, with preparation and extra support
- Lessons
Prow metrics were not recorded before the incident, which made it hard to understand, and alerting for these failures did not exist or did not work. After the cause was found and a fix devised, nothing happened for another two hours. The team counts it as luck that someone who recognised IOPS as the problem happened to be around to look.
These 3 cases involve Cloud block storage and Database. kubegap audits a Kubernetes cluster for gaps like these, read-only, from Claude Code or Codex; its checks cite public reports like the ones in this library.
By root cause2
Capacity exhaustion2 cases
- Contributing factor
- Organisation
Cloud provider outage1 case
- Contributing factor
- Organisation