ExtraSysWork out the decision first. The vocabulary follows.
Close-up of an analog control panel with dials, knobs and a small gauge

FORK 02/Rent what?/The Managed Database Bargain

The Managed Database Bargain

By the ExtraSys desk · Rent what? · 4 min read

You get the operations; you give up the controls. The question is which ones actually matter to your workload.

What the Provider Takes Over

When you move from a self-managed database to a managed service — RDS, Cloud SQL, Azure Database, Aurora, or any of their equivalents — you are offloading a specific bundle of work: OS patching, storage provisioning, backup scheduling, point-in-time recovery infrastructure, replication setup, and basic failover orchestration. These are not glamorous tasks, but they are relentless ones, and for most teams running databases as a supporting service rather than a core competency, eliminating them has genuine value.

The provider's side of this bargain is operationally well-understood. Automated backups run on schedules you configure but don't own. Failover to a standby replica happens within minutes under most failure scenarios. Storage scales without your DBA waking up at 2 a.m. because a tablespace filled. If your organisation is small, under-staffed in database expertise, or simply wants to redirect engineering attention toward product rather than plumbing, the managed model makes straightforward sense.

What the provider gets in return — and what you give up — is control over the layer beneath your database engine. You do not choose the storage backend. You do not configure kernel parameters, I/O schedulers, or huge pages. You cannot modify the binary itself. For PostgreSQL on a managed service, you are running a vendor-patched build, not necessarily the upstream release; the same is true for MySQL, SQL Server, and every other engine. The provider maintains the right to apply minor version upgrades, and their maintenance windows, not yours, govern when this happens.

What You Cannot Tune — and When That Matters

The tuning surface is where the trade-off bites. Self-managed databases expose the full parameter file. You can adjust buffer pool sizes, WAL behaviour, autovacuum aggressiveness, connection limits, and dozens of other levers that directly affect query latency and write throughput. Managed services expose a subset of those parameters through their own configuration interfaces. The subset is usually generous enough for general workloads; it is not always sufficient for specialised ones.

If your workload has unusual I/O patterns — say, a time-series application hammering sequential writes, or an OLAP query that genuinely benefits from parallelism settings the managed service caps — you will eventually hit a ceiling. The provider has tuned the defaults for the median customer. You are not always the median customer.

Failure modes also change in character. On a self-managed instance, you understand exactly what happens during a crash: you know the data directory, the WAL state, and the recovery path. On a managed service, failover is a black box. The provider's postmortem may tell you that a failover occurred; it is unlikely to tell you the full internal sequence. For most outages this is fine — the recovery happened and your connection string is live again. For forensic analysis of data anomalies, or for workloads where understanding the exact state at failure matters, the opacity is a real constraint.

Storage internals are similarly hidden. Aurora, for instance, uses a distributed, log-structured storage engine that is not MySQL's InnoDB on a disk — it is a purpose-built system that behaves differently under load, recovers differently, and has different failure characteristics. This matters when you are debugging a performance problem and your mental model of how data reaches disk is wrong. Cloud SQL is closer to vanilla PostgreSQL on a persistent disk, but you still do not control the disk geometry, caching tier, or IOPS allocation in the same way bare-metal access allows.

A bundle of network cables with printed adhesive labels at the termination point, tied with velcro straps

Making the Calculus Honest

The operational relief is real, not marketing. A team that has lost a weekend to a failed replica promotion, or spent a quarter chasing a vacuum freeze-related table lock, knows what managed services are worth. The question is always whether the specific controls you surrender are the ones your workload will need.

Managed services expose a subset of those parameters through their own configuration interfaces.

There is a reasonably clean decision filter. If your database is a supporting service — storing application state, handling transactional records, running reporting queries — and your team has no dedicated DBA, the managed bargain is almost certainly worth it. The ceiling you'll hit is higher than where most workloads operate.

If your database is the product — if your differentiation is built on query latency, storage efficiency, or custom replication topology — then the ceiling matters more. You should prototype specifically against the parameter boundaries and storage behaviour of any managed service before committing, not after. Discovering that a managed service caps your shared_buffers at a value that does not suit your working set after you have migrated your schema is an expensive surprise.

The middle ground is where managed databases do most of their damage to engineering teams: workloads that could self-manage but choose managed for convenience, then spend months fighting the constraints they didn't evaluate upfront. The bargain is not bad. Going in without reading the terms is.