DEV Community

Cover image for Upsun's autoscaling now covers PostgreSQL and MariaDB read replicas, not just apps and workers
Flora Brandão for Upsun

Posted on

Upsun's autoscaling now covers PostgreSQL and MariaDB read replicas, not just apps and workers

Quick technical update for anyone running on Upsun, or evaluating it: as of this month, managed PostgreSQL and MariaDB read replicas autoscale natively. This joins worker autoscaling, which has been running in production since March.

The mechanism
It's the same primitive across all three layers. Upsun watches average CPU and memory usage and adds or removes capacity when it crosses your configured scale-up or scale-down threshold, held for an evaluation period, with a cooldown window afterward so it doesn't thrash. You set the thresholds, the evaluation period, and the min or max instance limits; Upsun handles the rest.

For read replicas specifically, scaling happens without a restart or failover. Replicas join and leave the running cluster while the app keeps serving traffic against it. No plan-upgrade window, no maintenance ticket.

Why this is worth a post rather than just a changelog line
Database-tier autoscaling is the part most platforms hand off to something else: a third-party database engine, a Kubernetes operator, or a manual resize ticket that goes through a support queue. Application autoscaling has existed for years; the database tier lagged behind it. On Upsun, database autoscaling is now handled by the same system that scales your app and worker containers, configured the same way, billed the same way.

Practical implications if you're sizing infrastructure
You can stop provisioning read replicas for your worst-case peak and paying for that capacity 24 hours a day. Capacity comes off the bill when traffic drops.

Async and batch workloads (the worker side) and read-heavy query load (the database side) scale independently of your app tier, so a spike in one doesn't force you to over-provision the other.

Nothing about this requires you to run or maintain a separate operator or scaling controller. It's configured per environment, in the same console, CLI, or API you already use for the rest of the platform.

Where to go deeper

Happy to answer questions on thresholds, or how this interacts with manual vertical scaling, if anyone's mid-migration and wants specifics.

Top comments (0)