databasehigh-availabilitycost-optimizationarchitecture

High availability databases: what the second node really buys

HA doubles compute and storage on every major cloud, so the question is not whether availability is good but what outage cost the second node avoids. Here is how to do that arithmetic honestly.

The C3X Team··7 min read

Quick answer

High availability roughly doubles the database bill on every major managed service: RDS Multi-AZ doubles compute and storage, Cloud SQL HA doubles compute and storage, and Azure Flexible Server zone-redundant HA doubles compute. A db.r6g.xlarge with 1 TB of gp3 goes from about $493 to $986 per month. The decision is an expected-value calculation: HA typically converts a 30 to 90 minute unplanned recovery into a 60 to 120 second failover. If an hour of downtime costs your business $20,000 and you expect 1.5 incidents per year, HA avoids about $30,000 of expected annual loss for $5,900 of annual cost. If an hour costs $200, as in most internal tools, the arithmetic reverses completely.

Every architecture review has the moment where someone asks whether this database needs Multi-AZ, and the conversation resolves on instinct rather than numbers. That is a shame, because it is one of the few infrastructure decisions with a clean expected-value framing.

What HA costs

ConfigurationSingleHADelta
RDS db.t3.medium, 100 GBabout $61about $122$61
RDS db.m6g.large, 500 GBabout $172about $344$172
RDS db.r6g.xlarge, 1 TBabout $493about $986$493
RDS db.r6g.4xlarge, 4 TBabout $1,972about $3,944$1,972
Cloud SQL 4 vCPU / 32 GB, 1 TBabout $454about $908$454

There is one additional line people forget: Multi-AZ replication crosses availability zones, and while AWS does not charge for RDS Multi-AZ synchronous replication traffic itself, application traffic reaching a database in another AZ after a failover does incur cross-AZ transfer at $0.01 per GB each way. For a chatty application that is real money during an extended failover state.

What HA actually buys

Be precise about the failure modes HA covers, because it covers fewer than people assume. It covers: host failure, AZ failure, storage failure, and planned maintenance, converting what would be a restore-from-backup event into an automatic failover of roughly 60 to 120 seconds on RDS Multi-AZ, and under 35 seconds on Multi-AZ DB clusters. It does not cover: application bugs that corrupt data (the corruption replicates), accidental table drops (also replicates), region-wide outages, bad schema migrations, credential problems, or a query that takes the database down through resource exhaustion. Those are handled by backups, PITR, and testing, not by a standby node.

Meanwhile, without HA, a failed database instance means restoring from the most recent automated backup and replaying logs, which on a 1 TB database realistically takes 30 to 90 minutes and loses whatever was written after the last usable log position. So the honest framing is: HA converts an occasional 30-to-90-minute outage with possible data loss into an occasional 1-to-2-minute blip.

The expected value calculation

You need three numbers: cost of an hour of downtime, expected frequency of the failures HA covers, and the annual cost of HA.

SystemDowntime cost/hrIncidents/yrExpected loss avoidedHA cost/yr
Payments API$20,0001.5about $30,000$5,916
Customer-facing app$3,0001.5about $4,500$2,064
Internal admin tool$2001.5about $300$2,064
Staging environment$01.5$0$732

The payments API case is not close: HA returns five times its cost. The customer-facing app returns roughly twice its cost, which is a clear yes. The internal admin tool loses money on HA by a factor of seven, and staging is pure waste. A fleet that applies HA uniformly is overspending on the bottom two rows and possibly under-investing elsewhere.

The incident frequency figure deserves scrutiny. Managed database instance failures are genuinely rare; an annualized rate of 1 to 2 events including AWS-initiated maintenance is a reasonable planning number for a single instance, and most of those are maintenance windows that HA makes invisible rather than hardware failures. If your main benefit is avoiding maintenance-window downtime, weigh that against the option of simply scheduling maintenance at 3am on a Sunday.

The middle options

HA is not binary. Several intermediate positions cost less than a full standby:

OptionCost vs single-AZRecovery time
Single-AZ with tested restore runbook1.0x30 to 90 minutes
Single-AZ plus a small read replica to promote1.3x to 1.6x5 to 15 minutes
Multi-AZ instance2.0x60 to 120 seconds
Multi-AZ DB cluster (two readable standbys)about 2.5xunder 35 seconds

The read-replica route is underrated for tier-two systems: a db.r6g.large replica of a db.r6g.xlarge primary costs $189 rather than $493, gives you read offload in normal operation, and can be promoted in minutes. That is a 38 percent premium instead of 100 percent, and the replica earns part of its keep every day.

Do this per environment

The single highest-value action here is turning HA off in non-production. A fleet of twelve staging and development databases on db.m6g.large with Multi-AZ wastes roughly $2,064 per month for resilience nobody will ever exercise. Put that decision in your Terraform module as an environment-driven variable so it cannot be copied forward by accident.

Price the HA flag before you merge, because it is a boolean with a doubling consequence. Compare configurations against the resource catalog, and see Multi-AZ pricing in detail for the RDS specifics.

FAQ

How much does database high availability cost?

Roughly double. RDS Multi-AZ doubles compute and storage, Cloud SQL HA doubles compute and storage, and Azure zone-redundant HA doubles compute. A db.r6g.xlarge with 1 TB of gp3 goes from about $493 to $986 per month, a db.m6g.large with 500 GB from about $172 to $344, and a db.r6g.4xlarge with 4 TB from about $1,972 to $3,944.

What failures does Multi-AZ actually protect against?

Host failure, availability zone failure, storage failure, and planned maintenance, converting a restore-from-backup event into a 60 to 120 second automatic failover. It does not protect against application bugs that corrupt data, accidental table drops, bad schema migrations, credential problems, or resource-exhaustion outages, because all of those replicate to the standby. Those need backups, PITR, and testing.

When is HA not worth the cost?

When the expected loss avoided is below the HA cost. An internal admin tool at $200 per hour of downtime with 1.5 expected incidents per year avoids about $300 of loss against roughly $2,064 of annual HA cost, losing money by a factor of seven. Staging and development environments are pure waste. A payments API at $20,000 per hour avoids about $30,000 against $5,916, returning five times its cost.

Is there a middle ground between single-AZ and Multi-AZ?

Yes. A single-AZ primary with a smaller read replica you can promote costs roughly 1.3x to 1.6x single-AZ rather than 2.0x, recovers in 5 to 15 minutes instead of 30 to 90, and offloads reads every day in normal operation. A db.r6g.large replica of a db.r6g.xlarge primary is $189 against $493 for a full standby, a 38 percent premium instead of 100 percent.

How often do managed database instances actually fail?

Genuine hardware failures are rare. A planning figure of 1 to 2 disruptive events per year per instance is reasonable, and most of those are provider-initiated maintenance windows rather than failures. If avoiding maintenance downtime is the main benefit you are buying, weigh that against simply scheduling the maintenance window at 3am on a Sunday, which costs nothing.

How does C3X help with the HA cost decision?

C3X prices the HA flag from Terraform before you merge, which matters because multi_az is a boolean with a doubling consequence that is trivially copied from a production module into a staging one. Making the environment-driven difference visible in the pull request stops a fleet of non-production databases from quietly carrying production-grade redundancy.

What to do next

Make HA an expected-value decision, not a default. C3X reads your Terraform and prices your resources against a live catalog. Start with the quickstart.

Try C3X on your own Terraform

Free and open source. No API key required. One command to install, one command to estimate.