Database SRE

AWS RDS MySQL Cost Optimization

Reduce AWS RDS MySQL costs by 40-60% with proven optimization strategies. Learn Reserved Instance planning, right-sizing, storage optimization, and read replica strategies.

JusDB Team
Published December 6, 2022
4 min read

A B2B SaaS company audited their AWS bill and found $19,400/month going to RDS for MySQL — for a workload that peaked at 8,000 connections and 4TB of data. After a three-week optimization pass (Graviton migration, gp2→gp3 storage, Reserved Instance swap, cross-AZ traffic reduction), their bill dropped to $10,200/month. Same performance. Same HA setup. $110,000 saved annually.

RDS MySQL is expensive because AWS makes it easy to oversize and because the default settings favor safety over cost. This guide covers the specific levers — in priority order — that actually move the bill.

TL;DR checklist
  • Right-size on Graviton (t4g/m7g/r7g) before anything else.
  • Pick the cheapest deployment that fits your HA needs: Single-AZ → Multi-AZ DB Instance (2 nodes) → Multi-AZ DB Cluster (3 nodes).
  • Use gp3 storage with only the IOPS/throughput you need; enable Storage autoscaling.
  • Keep backups within free allowance; prune old manual snapshots.
  • Stop non-prod nightly; schedule automatic stop/start.
  • Use Reserved Instances for steady prod (1–3 years).
  • Upgrade to MySQL 8+ to avoid Extended Support fees; enable Optimized Writes/Reads where applicable.
  • Minimize cross-AZ data transfer between app and DB.
  • Consider RDS Proxy only if connection storms force you to oversize.

1) Right-size the instance (start with Graviton)

  • Prefer Graviton families (db.t4g, db.m7g, db.r7g) for better price/perf. Most MySQL workloads see meaningful savings at the same or better performance.
  • Use burstable (t) only for light, spiky loads; move to m/r for sustained CPU.
  • Revisit vCPU/RAM after schema and index tuning; many fleets are 1–2 sizes too large.

2) Choose the right HA option (don’t overpay)

  • Single-AZ: lowest cost; no automatic failover.
  • Multi-AZ DB Instance: 1 primary + 1 standby (roughly double instance hours vs Single-AZ), automatic failover.
  • Multi-AZ DB Cluster: 1 writer + 2 readers (3 instances). Faster failover, readable standbys; more expensive but higher performance and availability.

Tip: Match the tier to business impact. Many internal tools/dev/test don’t need Multi-AZ; prod OLTP usually does.

3) Storage: move to gp3 and size IOPS deliberately

  • Use gp3 for most MySQL workloads. It decouples capacity from performance and includes a baseline of IOPS/throughput.
  • Provision only what you need: set gp3 IOPS/throughput explicitly; avoid over-allocating “just in case”.
  • Provisioned IOPS (io1/io2) only for consistently high I/O needs where gp3 can’t keep up; it’s pricier.
  • Enable Storage autoscaling so capacity grows when needed (prevents disruptive emergency resizes).

4) Backups & snapshots: keep what you need, not everything

  • Automated backup storage is free up to the size of your DB in the Region. Extra retention and manual snapshots beyond that free pool are billed.
  • Prune long-lived manual snapshots; copy cross-region only when required for DR.
  • Set retention by data-class (prod vs non-prod) and review monthly.

5) Shut down idle environments

  • For dev/stage/sandboxes, stop RDS nightly/weekends. You keep paying for storage and backups, but you stop paying instance hours.
  • Automate stop/start on a schedule using Systems Manager Maintenance Windows or EventBridge + Lambda.

6) Commit for steady prod: Reserved Instances

  • For 24×7 prod, buy RDS Reserved Instances (1 or 3 years) to lock in deep discounts over On-Demand.
  • Mix Standard and Convertible RIs when you need some flexibility.

7) Version & engine features that save money

  • Upgrade to MySQL 8+ to avoid RDS Extended Support fees on EOL versions.
  • Enable Optimized Writes (MySQL 8.0.30+) and Optimized Reads on supported instance types to raise throughput—often lets you run a smaller instance.

8) Watch paid observability

  • Performance Insights: 7-day retention is free; longer retention is billed per vCPU per month. Keep only what you actually use for investigations.
  • Enhanced Monitoring: useful, but dial down sampling where appropriate.

9) Tame connection storms with care

  • RDS Proxy reduces connection overhead and failover pain for spiky/serverless apps, potentially avoiding an oversized DB.
  • It has its own charge (per vCPU-hour/ACU). Use when it replaces more expensive instance sizing or fixes Lambda/serverless surges.

10) Minimize data transfer surprises

  • Place app and DB in the same AZ to avoid cross-AZ charges between EC2 and RDS.
  • Replication to read replicas in the same Region doesn’t incur data transfer charges; cross-Region replication does.

Quick win matrix

ActionEffortTypical impactWhen to do it
Switch to GravitonLow–MedLower $/perfAny time you can redeploy or during maintenance
Move gp2/PIOPS → gp3LowLower storage $Most workloads not requiring sustained high IOPS
Enable storage autoscalingLowAvoid emergency resizesImmediately
Right-size instanceLowLower instance $After a week of metrics/PI review
Schedule stop/start (non-prod)Low~50–70% instance $ off-hoursDev/test/sandbox
Buy RIs for prodLowDeep discountStable 24×7 workloads
Prune snapshotsLowLower backup $Monthly
Upgrade to MySQL 8+MedAvoid ES fees + featuresBefore ES kicks in
Add RDS ProxyMedSmaller DB possibleSpiky/serverless connection patterns
  1. Measure a week: CPU, memory, read/write IOPS, throughput, connections, slow queries.
  2. Right-size on Graviton; switch storage to gp3; enable storage autoscaling.
  3. Tune backups (retention per env) and delete stale snapshots.
  4. Schedule stop/start for all non-prod.
  5. Buy RIs for steady prod once stable.
  6. Plan upgrade to MySQL 8+ and enable Optimized Writes/Reads where supported.
  7. Consider RDS Proxy only if connection storms are the bottleneck.

Need hands-on help? JusDB can audit your fleet, implement the above changes safely, and track savings.

Working with JusDB on RDS Cost Optimization

The savings from RDS cost optimization compound quickly — $10K/month is $120K/year, and most teams get there in 2–4 weeks of focused work. The bottleneck is usually knowing which lever to pull first and how to validate that the change didn't introduce a regression.

We run RDS cost audits as part of our AWS database consulting work. We analyze your current spend, identify the highest-ROI changes, and help you implement them safely without downtime. If you're spending more than $5K/month on RDS MySQL, reach out for a cost review.

Related reading: AWS RDS PostgreSQL Cost Optimization | Amazon EBS gp2 vs gp3 Guide | EC2 Instance Selection for Databases

Share this article

Database engineering notes

Articles like this one, in your inbox. No spam, unsubscribe anytime.

JusDB Team

Official JusDB content team

Keep reading

Ola Hallengren's SQL Server Maintenance Solution: Production Setup Guide

Production setup of Ola Hallengren's SQL Server Maintenance Solution: the four jobs that matter, FULL/DIFF/LOG backup cadence for your RPO, DBCC CHECKDB scheduling, IndexOptimize tuning, encryption, and CommandLog-based alerting.

SQL Server13 minMay 27, 2026
Read

PostgreSQL Monitoring with Prometheus and postgres_exporter: A Production Guide

Set up PostgreSQL monitoring with Prometheus and postgres_exporter. Includes install steps, critical alert rules, Grafana dashboard panels, and custom query metrics.

PostgreSQL10 minMar 5, 2026
Read

PostgreSQL 16: New Features Every DBA Should Know

PostgreSQL 16 introduced logical replication from standbys, pg_stat_io, SQL/JSON constructors, COPY improvements, and pg_stat_checkpointer. Full DBA upgrade guide.

PostgreSQL12 minMar 5, 2026
Read