IL-0371 Render · 2023-04-21databasenetworking
Half of new connections to Render Postgres databases with point-in-time recovery failed while their backup jobs ran
Render Postgres databases are reached through a stable internal service name such as dpg-123abc, which the cluster keeps pointed at the database's current IP address. The daily PITR backup job, which keeps an accurate restore point for each database, was given networking labels similar to the database's own, so the routing layer added the backup job's IP address to the database's service name as a second target. The backup job ran no database, so new connections routed to it failed, which made half of new connections fail while a backup was running. Render first disabled backups on the affected databases. When backups were turned back on, the scheduler for asynchronous jobs immediately ran a backup that it counted as a recently missed run, which caused downtime during business hours. Render changed the backup job's network labels so the routing layer no longer treats it as a database endpoint, and the incident was marked resolved on 27 April 2023.
- Severity
- –
- Scope
- New connections to PITR-enabled Render Postgres databases while a PITR backup job was running; existing connections were unaffected
- Users affected
- –
- Region
- –
- Time to detect
- –
- Time to resolve
- –
Symptoms
After Point-in-time Recovery (PITR) was released to eligible new Render Postgres databases on 21 April 2023, 50% of new connections to PITR-enabled databases failed while a PITR backup job was running. A backup takes 15 to 45 minutes depending on database size, and existing connections, such as those held through connection pooling, kept working.
Render engineers had not seen this kind of failure before. The engineers noticed a change in memory behaviour, specifically the active page cache, and tried to reproduce it, but that attempt left out the fact that new connections were failing, so finding the root cause took time.
Backups were then disabled for affected databases until they could be scheduled in low-traffic hours. When a backup was enabled and rescheduled, the job ran at once because a recent run had been missed, and this caused another outage during business hours. Some early status updates said the problem was resolved before it was, and some users saw the failures come back.
Root cause
Root cause Faulty deployment
- Trigger
- Point-in-time Recovery was released to eligible new databases on 21 April 2023, and its backup job carried an incorrect networking configuration.
Detection
–
Remediation
- Disabled backups for affected databases until they could be scheduled in low-traffic hours
- Changed the backup job's network labels so the routing layer no longer picks it up as a database
Action items
- Tighten the process for sharing incident updates so problems are not declared resolved too early
- Use more specific network labels for the database routing layer so ineligible IPs are never added
- Run a skipped asynchronous job in the next scheduled window instead of immediately
- Use open source benchmarking software to reproduce issues customers notice
Lessons
–
Sources
- https://status.render.com/incidents/lvz7ycrpb5nx · official-status · archived copy
Related cases
IL-0380A compaction change in InfluxDB Cloud us-east-1 dropped data from compacted files, and queries missed data for weeksInfluxData · 2026same root cause · shared Database backups and snapshots, Database
IL-0356Every domain hosted on Railway returned HTTP 404 to new connections for five minutes because route lookups failedRailway · 2026same root cause · shared Database
IL-0136A deployment that cleared an internal service's caches at peak traffic sent 20 times the normal load to the Azure OpenAI metadata backend in Sweden Central, and health checks that depended on its database restarted instances in a loop for almost six hoursMicrosoft Azure · 2026same root cause · shared Database
IL-0570Dropping an unused MySQL table stalled queries on its busy parent table and crowdworks.jp was hard to reach for a minuteCrowdWorks · 2026same root cause · shared Database
IL-0510MIT Learn's RDS PostgreSQL ran out of storage after a release and learn.mit.edu returned 503s and 504s for hoursMIT Open Learning · 2026same root cause · shared Database
IL-0369Railway's backend API went down when a column migration waited on locks and replicas could not get database connectionsRailway · 2025same root cause · shared Database
IL-0547Buildkite annotation queries timed out and drove database CPU up across shards after a migration removed an indexBuildkite · 2025same root cause · shared Database
IL-0315Railway's backend API went down when an index build locked a billion-row Postgres table and used up every connectionRailway · 2025same root cause · shared Database
IL-0327After a blue/green upgrade of CircleCI's workflows database every query hit disk, and workflow starts lagged or failedCircleCI · 2025same root cause · shared Database
IL-0324Three MediaWiki deployments lost Memcached after a PHP 8.1 rollout and overloaded the External Storage database clusterWikimedia Foundation · 2025same root cause · shared Database
IL-0307Supabase's Postgres connection pooler Supavisor 2.0 dropped connections for about 80% of us-east-1 tenantsSupabase · 2025same root cause · shared Database
IL-0552CircleCI's archival database ran out of storage, slowing workflow and job starts and the display of workflows in the UICircleCI · 2025same root cause · shared Database
IL-0554A database migration used up Sentry US's Postgres connections, and the site and event ingestion were down for 22 minutesSentry · 2024same root cause · shared Database
IL-0571STORES reservation returned bursts of 504 errors when a smart-list query held a database process for over 20 minutesSTORES · 2024same root cause · shared Database
IL-0293Cloud Bigtable in us-central1 had higher latency and connection errors for about 32 hours from low-rate packet lossGoogle Cloud · 2023same root cause · shared Database
IL-0523TANF-app production deployments were blocked for two months when a search-index migration ran out of database disk spaceU.S. Department of Health and Human Services · 2023same root cause · shared Database
IL-0567Aurora MySQL behind Cookie Run: OvenBreak hit 100% CPU after a sales-ranking feature launch, and players could not playDevsisters · 2023same root cause · shared Database
IL-0483Replicate's website and API returned slow responses and HTTP 500s for two hours as PostgreSQL connections ran outReplicate · 2023same root cause · shared Database
IL-0524An index migration locked Open Collective's whole Transactions table and degraded the service for nearly an hourOpen Collective · 2023same root cause · shared Database
IL-0328A field type change in the database of CircleCI's job distribution service left all jobs stuck in "not running"CircleCI · 2021same root cause · shared Database
IL-0566Hot ranges after a Cookie Run: Kingdom guild update drove CockroachDB nodes to 100% CPU, forcing emergency maintenanceDevsisters · 2021same root cause · shared Database
IL-0034A crashing stats agent sidecar marked every pod unready and the service mesh pulled all services out of trafficAirbnb · 2019same root cause · shared Service discovery
IL-0391GoCardless API requests timed out for about 15 seconds while a Postgres migration waited for an AccessExclusive lockGoCardless · 2015same root cause · shared Database
Check your cluster for this
For AI tools and scripts
- This case as JSON: https://incidentlib-api.benchlet.com/cases/IL-0371
- The cases most like it: https://incidentlib-api.benchlet.com/cases/IL-0371/similar
- MCP server (Streamable HTTP, no key):
https://incidentlib-mcp.benchlet.com/mcp
The API needs no key. The MCP server offers search_incidents, get_incident, list_incidents, get_topic and vocab; both are explained on API and MCP.