AWSCost

AWS cost · RDS right-sizing

Why RDS looks expensive - and how to right-size the instance

Someone posted that cloud databases are “incredibly expensive for small projects.” They had a 100 million row MySQL table, asked an AI assistant to price out RDS, and got quoted db.t4g.large at about $106/month. That number is real - but it answers the wrong question. The same database runs fine on db.t4g.small at about $23/month. Here is why the tier was wrong, and how to size RDS to what your queries actually use.

A low-traffic MySQL database usually runs fine on db.t4g.small at about $23/month, not the $100+ tier an AI or a rushed guess tends to suggest. RDS instance size follows your working set - the data your queries actually touch - not your total row count. Match the RAM to real usage and the bill drops fast.

How much should a small RDS database cost?

Here are the current on-demand prices for the burstable t4g family (us-east-1, Single-AZ, compute only - storage and I/O are billed on top):

InstanceRAMCompute / month
db.t4g.micro1 GiB$11.68/month
db.t4g.small2 GiB$23.36/monthright answer here
db.t4g.medium4 GiB$69.35/month
db.t4g.large8 GiB$106.58/monthwhat the AI quoted

For a small, low-traffic workload, the jump from t4g.small to t4g.large buys 6 GiB of RAM you never touch. That is about $83/month - roughly $1,000 a year - for headroom the database does not use.

Why did the AI quote 4x too much?

The AI was not broken. It anchored on the size of the table - 100 million rows sounds huge - and picked an instance to match that number. But row count does not decide how much RAM a database needs. A large table with selective queries and low traffic keeps only a small working set in memory at once. The mistake was not the tool; it was that nobody stopped to question the tier.

How do I pick the right RDS instance size?

Size the instance to your working set, not your row count. The working set is the slice of data your queries actually read - indexes and hot rows - which is usually far smaller than the full table. Two quick checks in CloudWatch tell you if you are over-provisioned: FreeableMemory that stays high, and CPUUtilization that stays low. If both are true, drop a tier and watch the same two metrics. Repeat until you have a comfortable margin, not a wasteful one. This pulls average free memory over a window you set - lots of headroom means the instance is oversized:

# average FreeableMemory over a chosen window (edit the dates)
aws cloudwatch get-metric-statistics \
  --namespace AWS/RDS --metric-name FreeableMemory \
  --dimensions Name=DBInstanceIdentifier,Value=my-db \
  --start-time 2026-07-01T00:00:00Z \
  --end-time   2026-07-08T00:00:00Z \
  --period 3600 --statistics Average

When does it make sense to leave RDS?

Usually it does not. Right-sizing captures most of the savings while you keep managed backups, patching, and failover. If the instance is already the right size and steady, the next lever is a reserved instance, which discounts the compute you were going to run anyway. Moving to a self-managed database on a tiny instance can look cheaper on paper, but you take on the operational work RDS was doing for you.

Want to know if you are overpaying for RDS - or anything else on your bill? Connect your account read-only and see what it is wasting, in real dollars.

Connect your AWS

The role can only read - Get, Describe, List, nothing else. Read the exact permissions before you deploy it, and delete the stack whenever you want.

Frequently asked questions

Why is my RDS bill so high?+

Most small RDS bills are high because the instance is over-provisioned. A low-traffic database on db.t4g.large (8 GiB RAM, about $106.58/month) usually runs the same on db.t4g.small (2 GiB, about $23.36/month).

What RDS instance size do I need for a small MySQL database?+

For a low-traffic MySQL database, db.t4g.small with 2 GiB of RAM is a common fit. Size to your working set - the data your queries actually touch - not your total row count.

How much does db.t4g.small cost?+

About $23.36/month for compute (us-east-1, Single-AZ, on-demand). Storage and I/O are billed separately on top of that.

Does a 100 million row table need a large instance?+

Not necessarily. A 100 million row table with selective queries on a low-traffic app can run on 2 GiB of RAM. Row count does not set instance size; working set does.

db.t4g.large vs db.t4g.small - what is the difference?+

t4g.large has 8 GiB of RAM (about $106.58/month) and t4g.small has 2 GiB (about $23.36/month). For a small workload the extra RAM sits idle, so you pay about $83/month for headroom you never use.

How do I know if my RDS instance is over-provisioned?+

Check CloudWatch for FreeableMemory and CPUUtilization. Consistently high freeable memory and low CPU means you can drop a tier and still have a comfortable margin.

Should I move off RDS to save money?+

Usually not. Right-sizing the instance captures most of the savings while you keep managed backups, patching, and failover. Leave RDS only if you genuinely do not need a managed database.

Related cost breakdowns

More AWS cost breakdowns