How to Determine Application IOPS Requirements

Reading Time: 3 minutes

To determine an application’s IOPS (Input/Output Operations Per Second) requirements, you must analyze its workload characteristics—specifically the frequency and size of read/write operations.

1. Use Performance Monitoring Tools

The most accurate method is to measure an existing instance of the application under typical or peak load:

  • Windows: Use Performance Monitor (PerfMon) to track the PhysicalDisk \ Disk Transfers/sec counter, which directly represents IOPS.
  • Linux: Use iostat (specifically iostat -h or iostat -x). The tps (transactions per second) column corresponds to IOPS.
  • Cloud (AWS/Azure): Monitor native metrics like AWS CloudWatch (VolumeReadOps + VolumeWriteOps) over a 2-4 week period to capture real-world demand.

2. Apply Sizing Formulas

If you are designing a new system, you can estimate requirements using these variables:

  • The Basic Formula:
    • IOPS = Disk Reads/sec + Disk Writes/sec
  • Transactional Workload Estimation:
    • Total IOPS = TPS (Transactions Per Second)* I/O per Transaction
    • Example: 1,000 TPS at 4 I/O operations each = 4,000 IOPS

3. Consider Key Impact Factors

  • Block Size: Most benchmarks assume a 4KB block size. Larger block sizes (e.g., 256KB) may count as multiple IOPS in cloud environments like AWS EBS.
  • Read/Write Mix: Write-intensive applications (e.g., logging) often require higher performance overhead than read-heavy ones (e.g., web hosting).
  • RAID Penalty: If using RAID, you must account for “write amplification.” For example, RAID 10 requires 2 I/Os per write, while RAID 6 requires 6 I/Os

4. Benchmark Against Industry Norms

Common IOPS requirements by workload type:

  • Small/Medium Web Hosting: 1,000 – 3,000 IOPS.
  • Standard Database (OLTP): 5,000 – 30,000+ IOPS.
  • Development Environments: 200 – 2,000 IOPS.
  • High-Traffic Enterprise Apps: 15,000+ IOPS.

These guides detail methods for determining application IOPS requirements, including using performance monitoring tools and applying sizing formulas:

5. Calculate Hardware Capacity (Supply)

Your server’s total IOPS capacity depends on the RAID configuration. Standard 1.92TB 6Gbps Enterprise SSDs typically deliver ~90,000 Read IOPS and ~30,000–38,000 Write IOPS per drive.

  • RAID 10 (High Performance): Best for PostgreSQL databases.
    • Total Read IOPS: approx 24 * 90,000 = 2.16 Million IOPS
    • Total Write IOPS: approx (24 * 35,000) / 2 = 420,000  IOPS (due to 2x write penalty).
  • RAID 60 (Capacity/Safety): Higher write penalty (6x).
    • Total Write IOPS: approx (24 * 35,000) / 6 = 140,000 IOPS

6. Measure Application Demand (Demand)

Since you are using Java/Spring Boot and PostgreSQL on-prem, use these specific methods to find your actual requirement:

  • PostgreSQL Internal Metrics:
    • Enable track_io_timing in postgresql.conf to measure how long the OS takes to fulfill I/O requests.
    • Check pg_stat_bgwriter to see how many “dirty” buffers are being written to disk during checkpoints.
  • Linux OS Level:
    • Run iostat -xz 1 while the Spring Boot app is under peak load.
    • Look at the r/s (reads per second) and w/s (writes per second) columns. Their sum is your actual IOPS requirement.
  • Application-Level Estimation:
    • A common rule of thumb for PostgreSQL is that each Insert/Update operation requires approximately 2 IOPS per index (including the Primary Key).
    • If a table has 3 indexes, 1,000 inserts/sec will require ~6,000 Write IOPS.

7. Optimize for Java/PostgreSQL

  • Checkpoint Tuning: Set checkpoint_completion_target = 0.9 in PostgreSQL to spread out the I/O load over a longer period, preventing IOPS spikes that can cause Spring Boot application timeouts.
  • WAL Performance: Since you have 24 drives, consider putting your WAL (Write Ahead Log) on a separate RAID 1 mirror to ensure database commits aren’t delayed by heavy data-file I/O. [9, 10]