{
  "slug": "database-iops-cost",
  "title": "Database IOPS Cost Calculator",
  "heading": "Database IOPS & Storage Cost Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/database-iops-cost",
  "summary": "Price provisioned IOPS storage for RDS, EBS, or managed databases.",
  "description": "Cloud block storage for databases is typically priced on three axes: capacity (GB), throughput (MB/s), and IOPS (input/output operations per second), and provisioned-IOPS volumes charge for IOPS separately from capacity, unlike general-purpose SSD tiers which bundle a baseline IOPS allowance into the GB price. This calculator adds up capacity cost plus any IOPS above the included baseline plus any throughput above the included baseline, which is exactly how AWS io1/io2 and gp3 volumes, and equivalent Azure/GCP premium disks, actually bill. Undersized IOPS shows up as query latency and connection pool saturation under load, and it's one of the most common causes of a database that 'suddenly' gets slow at higher traffic — the fix is usually cheaper than people expect, often $50-200/month, versus the cost of an emergency instance resize during an incident.",
  "formula": "Cost = (GB × $/GB) + (max(0, provisioned IOPS − baseline IOPS) × $/IOPS) + (max(0, MB/s − baseline) × $/MBps).",
  "dateModified": "2026-09-30",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=database-iops-cost",
  "inputs": [
    {
      "id": "capacityGb",
      "label": "Volume capacity",
      "kind": "number",
      "hint": null,
      "default": 500,
      "unit": "GB",
      "min": 1,
      "max": null
    },
    {
      "id": "capacityRate",
      "label": "Capacity rate",
      "kind": "number",
      "hint": null,
      "default": 0.08,
      "unit": "$/GB-mo",
      "min": 0,
      "max": null
    },
    {
      "id": "provisionedIops",
      "label": "Provisioned IOPS",
      "kind": "number",
      "hint": null,
      "default": 6000,
      "unit": null,
      "min": 0,
      "max": null
    },
    {
      "id": "baselineIops",
      "label": "Included baseline IOPS",
      "kind": "number",
      "hint": null,
      "default": 3000,
      "unit": null,
      "min": 0,
      "max": null
    },
    {
      "id": "iopsRate",
      "label": "IOPS rate above baseline",
      "kind": "number",
      "hint": null,
      "default": 0.005,
      "unit": "$/IOPS-mo",
      "min": 0,
      "max": null
    },
    {
      "id": "throughputMbps",
      "label": "Provisioned throughput",
      "kind": "number",
      "hint": null,
      "default": 500,
      "unit": "MB/s",
      "min": 0,
      "max": null
    },
    {
      "id": "baselineMbps",
      "label": "Included baseline throughput",
      "kind": "number",
      "hint": null,
      "default": 125,
      "unit": "MB/s",
      "min": 0,
      "max": null
    }
  ],
  "outputs": [
    {
      "id": "total",
      "label": "Monthly volume cost",
      "format": "currency",
      "hint": null,
      "primary": true
    },
    {
      "id": "capacityCost",
      "label": "Capacity cost",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "iopsCost",
      "label": "Extra IOPS cost",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "throughputCost",
      "label": "Extra throughput cost",
      "format": "currency",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Volume capacity: 500 GB",
      "Capacity rate: 0.08 $/GB-mo",
      "Provisioned IOPS: 6000",
      "Included baseline IOPS: 3000",
      "IOPS rate above baseline: 0.005 $/IOPS-mo",
      "Provisioned throughput: 500 MB/s",
      "Included baseline throughput: 125 MB/s"
    ],
    "outputs": [
      "Monthly volume cost: $70.00",
      "Capacity cost: $40.00",
      "Extra IOPS cost: $15.00",
      "Extra throughput cost: $15.00"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter volume capacity (GB).",
      "Enter capacity rate ($/GB-mo).",
      "Enter provisioned iops.",
      "Enter included baseline iops.",
      "Enter iops rate above baseline ($/IOPS-mo).",
      "Enter provisioned throughput (MB/s).",
      "Enter included baseline throughput (MB/s).",
      "Read your monthly volume cost on the right — it updates as you type.",
      "Hit Share to keep the scenario or send it to someone."
    ]
  },
  "scenarios": [
    {
      "name": "Conservative",
      "description": "Lower-end numbers — what if things land soft?",
      "values": {
        "capacityGb": 300,
        "capacityRate": 0.048,
        "provisionedIops": 3600,
        "baselineIops": 1800,
        "iopsRate": 0.003,
        "throughputMbps": 300,
        "baselineMbps": 80
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "capacityGb": 500,
        "capacityRate": 0.08,
        "provisionedIops": 6000,
        "baselineIops": 3000,
        "iopsRate": 0.005,
        "throughputMbps": 500,
        "baselineMbps": 130
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "capacityGb": 800,
        "capacityRate": 0.128,
        "provisionedIops": 9600,
        "baselineIops": 4800,
        "iopsRate": 0.008,
        "throughputMbps": 800,
        "baselineMbps": 200
      }
    }
  ],
  "limitations": [
    "Results are estimates before tax, fees, and inflation unless an input explicitly covers them.",
    "Rates are treated as fixed for the whole period — variable-rate products will drift from this projection.",
    "This is educational maths, not financial advice. Check anything contractual with the lender or your accountant."
  ],
  "faq": [
    {
      "q": "How do I know how many IOPS my database actually needs?",
      "a": "Check your database's current IOPS utilization metric (CloudWatch's VolumeReadOps/VolumeWriteOps for RDS, or iostat on self-managed hosts) during peak traffic, not average. A common baseline is 3-5 IOPS per GB for general workloads and 10+ IOPS per GB for write-heavy OLTP, but the only reliable number is what you measure under real peak load."
    },
    {
      "q": "Is gp3 or io2 cheaper for a typical production database?",
      "a": "gp3 includes 3,000 IOPS and 125 MB/s baseline in the per-GB price and charges modestly for anything above that, making it cheaper for most workloads under roughly 16,000 IOPS. io2 costs more per IOPS but supports far higher ceilings and better durability guarantees, so it's the right choice only once you're consistently provisioning tens of thousands of IOPS or need sub-millisecond consistency."
    },
    {
      "q": "Does adding a read replica reduce IOPS cost on the primary?",
      "a": "It shifts read IOPS off the primary onto the replica's own volume, which has its own IOPS cost, so total fleet IOPS spend usually goes up, not down. The benefit is throughput and availability, not cost savings — replicas are a scaling and resilience tool, not a cost optimization, and should be justified on those terms."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/cloud-vm-monthly-cost",
    "https://www.revenuelab.fyi/toolbox/backup-storage-retention-cost",
    "https://www.revenuelab.fyi/toolbox/cloud-vs-colo-tco"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Database IOPS Cost Calculator (https://www.revenuelab.fyi/toolbox/database-iops-cost)"
}