GintiCalcEvery calculation

SchemaSize

Database Storage, RAM & IOPS Sizing Calculator

Rows × bytes is the number everyone estimates. Indexes, replicas, and the working set are what you actually pay for.

Database storage, RAM, and IOPS by table size

Storage is raw rows plus 30% index overhead, grown 5% a month for 12 months, then multiplied across replicas. RAM targets holding a 20% working set in the buffer pool.

RowsBytes/rowReplicasPeak QPSRaw dataTotal storageRAMPeak IOPS
10 M50015004.7 GB10.9 GB2.7 GB2,500
100 M50012,00046.6 GB108.7 GB27.2 GB10,000
100 M50022,00046.6 GB217.4 GB27.2 GB10,000
100 M2,00015,000186.3 GB434.9 GB108.7 GB25,000
1 B500210,000465.7 GB2,174.3 GB271.8 GB50,000

Rows two and three are the same database with one extra replica: storage doubles while RAM and IOPS per node do not. IOPS assume 3 reads and 1 write per query with 2x write amplification.

A database sizing calculator turns a schema and a traffic estimate into the three numbers that determine which instance class you need: storage, memory, and IOPS. Teams usually estimate the first by multiplying rows by bytes per row and stop there — a figure that is typically off by several multiples once the things that actually consume capacity are included.

Storage starts with raw row data but grows immediately from there. Indexes commonly add anywhere from a quarter to well over the size of the table itself, depending on how many you maintain and how wide the indexed columns are. Growth compounds monthly, so provisioning for today guarantees a migration soon; the calculator applies your monthly growth rate across the months of headroom you want. Replicas multiply the whole figure, because a three-node cluster stores three full copies. Memory is sized differently and matters more: databases perform acceptably when the frequently-accessed working set fits in the buffer pool, and fall off a cliff when it does not. The calculator takes your working-set percentage and adds a margin for connections, sort space, and query execution. IOPS comes from peak queries per second multiplied by reads per query, plus writes multiplied by a write amplification factor — because a single logical write becomes several physical ones once the write-ahead log, index updates, and replication are counted.

The most consequential of the three is RAM, and it is the one most often under-provisioned. A working set that fits in memory means most reads are served without touching disk; a working set slightly too large means a meaningful share of queries fall through to storage, and both latency and IOPS requirements jump by an order of magnitude. This is why a database can perform well for months and then degrade sharply as it grows past its buffer pool — the failure is not gradual. Write amplification is the second common surprise: a factor of three to five is typical for a replicated engine with several indexes, so a workload that looks like a thousand writes per second can present tens of thousands of IOPS to the storage layer. The source research recommends sizing from workload shape, indexes, growth, replicas, and provider price tables, and that remains the right frame — use this to establish requirements, then map them onto a specific provider's instance and volume pricing. This estimates capacity only and excludes backup storage, connection pooling, and query optimization, all of which can change the answer substantially.

RAM is the cliff, not the slope

While the hot working set fits in the buffer pool, reads are served from memory and everything is fast. Once it slightly exceeds available RAM, a meaningful share of queries fall through to disk and latency plus IOPS jump by an order of magnitude. Databases don't degrade smoothly as they grow — they fall off a cliff at that boundary, which is why sizing RAM to the working set matters more than sizing disk.

One logical write is several physical writes

Write amplification of 3-5× is normal: the write-ahead log, every secondary index, and replication each multiply a single application write. A workload of 1,000 writes/second can present 4,000+ IOPS to storage. Sizing provisioned IOPS from application-level write counts alone is one of the most common ways a database deployment gets throttled.

Frequently asked questions

200M rows at 400 bytes with 40% index overhead, 3 copies, and 12 months of 5% growth — how much storage?

Raw data is about 74.5 GB; indexes push it to 104 GB; twelve months at 5% compounds it to roughly 188 GB per node; three copies means about 563 GB to provision. Note the raw figure most people estimate was under a seventh of the real requirement.

How much RAM does my database need?

Enough to hold the frequently-accessed working set, plus roughly 25% for connections, sorting, and query execution. If 20% of a 188 GB dataset is hot, that's about 38 GB of working set and roughly 47 GB of RAM. Under-provisioning here degrades performance far more sharply than under-provisioning disk.

What is write amplification and why does it matter?

It's the ratio of physical writes to logical ones. A single application write also writes the WAL, updates each secondary index, and ships to replicas — commonly 3-5× total. It matters because provisioned IOPS is billed and throttled at the storage layer, so sizing from application write counts alone will under-provision badly.

How is this different from the cloud storage cost calculator?

A storage cost calculator prices a volume of bytes at rest. This one derives how many bytes you'll actually have after indexes, replicas, and growth, and adds the RAM and IOPS requirements that determine your instance class. Use this to find the requirement, then that to price it.

Related Developer calculators

You might also like

Last updated: July 31, 2026