Incident Library
Applied filters ComponentDatabaseSymptomDeploys failingClear allEvery case under the filters, with no sentence; newest first.
Suggested filters Search, and the values found in your words appear here.

Graph

  • Root cause
  • Component
  • Symptom
  • Contributing factor
  • Case

Cases2 cases

1 to 2 of 2

  1. Symptoms

    At 11:48 UTC on 22 September 2025, minutes after Railway had resolved a dashboard outage, its control plane showed abnormal resource consumption and elevated API latency. A large backlog of deployments queued during the first outage had started all at once, and the control plane began returning elevated database errors.

    Trigger

    After a dashboard outage caused by a schema change was fixed, a large backlog of queued deployments started at the same time and put the control plane and its database, behind a newly upgraded PgBouncer, under heavy load.

    Root cause
    Component
    Contributing factor
    Detection

    Users reported at 11:05 UTC that the project canvas failed to load; the control plane's abnormal resource consumption and elevated API latency were seen at 11:48 UTC and opened as a new incident.

    Remediation
    • Deployed a fix for the API failure caused by the schema change within 15 minutes
    • Suspended deployments for non-Pro users so Pro users could deploy and the queue could drain
    • Suspended all deployments, Pro included, for up to 20 minutes during peak instability
    • Scaled up the control plane database's CPU, memory, connection limits and IOPS
    • Rolled PgBouncer back to the previous stable version, which brought all metrics back to nominal
    • Re-enabled deployments for all non-Pro users
    • Fixed the edge case in which private networks and their endpoints were missing from the dashboard
    Action items
    • Re-engineer parts of the control plane to be more resilient, moving large parts of its storage layer away from Postgres
    • Add CI validation that keeps disruptive schema changes out of production and automated schema compatibility checks before backend deployments
    • Monitor and alert on PgBouncer node CPU, memory and connection pool utilization
    • Upgrade PgBouncer in phases, instance by instance, instead of everywhere at once
    Lessons

    Railway believes that without the breaking schema change reaching production the cascade would not have happened, that monitoring PgBouncer's own CPU, memory and pool metrics would have shown the performance regression earlier and shortened recovery, and that upgrading PgBouncer instances one at a time would have exposed the version-specific problem before it reached every instance.

  2. Symptoms

    On 20 September 2023 the sprint 82 production deployment of TANF-app failed with a disk space error while it ran a large search-index migration, search_indexes 0017, against the production PostgreSQL database on cloud.gov. Production could not be deployed again until 9 November.

    Trigger

    The sprint 82 deployment on 20 September 2023 recreated the deleted search_indexes migration 0016 and ran the large migration search_indexes 0017 against the production database.

    Root cause
    Component
    Contributing factor
    Detection

    The sprint 82 production deployment failed with a disk space error, and the large migration search_indexes 0017 was identified as the cause.

    Remediation
    • Increased the production database instance size and re-ran the migrations
    • Created a backup of the production database
    • Truncated all of the search_indexes tables
    • Redeployed the sprint 82 release
    • Fixed the bug that stored empty fields as blank strings
    Action items
    • Write troubleshooting steps for database problems into the technical documentation
    • Write wiki pages and operations playbooks that outline common problems and responses
    • Add a database section and the cf revisions command to the failed-deployment troubleshooting document
    • Keep a GitHub repository of changes made directly to production
    • Save terminal output from production debugging sessions
    • Create Django migration best practices to enforce in code reviews
    • Do not edit migrations that have been merged to develop; write a new migration instead
    • Rename auto-generated migrations to more descriptive names
    • Use one auto-generated migration per model change and regenerate when a pull request makes successive changes
    • Organise a discussion on database seeding and backups for testing
    Lessons

    The work was unplanned and pulled in many developers from a small team, so the team wants documentation and playbooks that let fewer people step away from current work. Large datasets and unexpected edge cases such as rows without space-fill had not been tested, and a copy of the production database with PII scrubbed would allow tests against real-world data. Deploying in-progress code to other environments and changing migrations afterwards had caused conflicts there.

Check your cluster for this

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