Cases2 cases
1 to 2 of 2
IL-0318Clerk's APIs went down with lock contention and 429s while a Google Cloud SQL live migration slowed its database diskClerk2026- Symptoms
At 15:57 UTC on 10 March 2026, Clerk's alerting reported increased latency and elevated 5xx errors across its APIs, and the incident was declared. Monitoring showed increased lock contention in the database, which had started about a minute earlier.
- Trigger
A routine live migration of the Google Cloud SQL virtual machine that hosts Clerk's Postgres database, done without advance notice to Clerk, did not work as intended.
- Root cause
- Component
- Contributing factor
- Detection
Alerting reported increased latency and elevated 5xx errors across the APIs at 15:57 UTC, and monitoring showed lock contention in the database that had begun about a minute earlier.
- Remediation
- Enabled Origin Outage Mode to keep session management working
- Opened a ticket with GCP after seeing elevated IO wait on reads
- Disabled Origin Outage Mode after the live migration completed and the system stabilised
- Action items
- Ask Google to pin the database again to stop further live migrations
- Use replica promotion instead of live migrations for all Postgres database maintenance
- Move to another database provider or run Postgres in-house unless Google offers a way to disable live migrations permanently
- Return 500 instead of the internal service's 429 so applications can tell the state of Clerk's systems from the error code
- Shift most of the engineering team to reliability-focused projects
- Lessons
Clerk concludes that Cloud SQL live migrations are still unsafe after months of joint work with Google, and that they are opaque, leaving Clerk to trust Google's word. Clerk prefers traditional replica promotion for all Postgres maintenance, an automated process it had already used without incident for a Postgres major version upgrade on January 17, 2026.
IL-0315Railway's backend API went down when an index build locked a billion-row Postgres table and used up every connectionRailway2025- Symptoms
At 18:36 UTC on 28 October 2025, two minutes after a database change went live in production, Railway's internal monitoring alerted and paged the engineering team. The dashboard could not be opened, CLI operations that use the API, such as railway up, failed, GitHub-based deployments were delayed because webhook processing failed, and all Railway Public API operations were disrupted.
- Trigger
A routine schema change to the backend's Postgres database, introduced at 18:23 UTC and live in production at 18:34 UTC, that added a new column with an index without the CONCURRENTLY option.
- Root cause
- Component
- Contributing factor
- Detection
Internal monitoring alerts paged the engineering team at 18:36 UTC, and the incident was declared at 18:41 UTC.
- Remediation
- The index migration finished after about 30 minutes and released the table lock, and the queued operations and connection pools recovered
- Action items
- Enforce CONCURRENTLY for all index creation in CI and block pull requests that do not use it
- Adjust PgBouncer pool limits so they cannot overwhelm the Postgres instance's capacity
- Configure database user connection limits so administrative access stays possible during incidents
These 2 cases involve Database and Database proxy and connection pooler. 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
Cloud provider outage1 case
- Component
- Contributing factor
- Organisation
Faulty deployment1 case
- Contributing factor
- Organisation