How to Correctly Estimate the Average Number of I/O Operations my RAID 10 disk can offer? The average Input/Output Operations per Second a disk can sustain is a very important factor in the tuning of MySQL / InnoDB databases, as it drives the speed with which Dirty InnoDB Buffer Pool pages are flushed back to the disk.

Is there a method or a formula I can use to estimate the average I/O Operations per Second my RAID 10 disk array can run on?
tl;dr Yes you can do a rough and ready calculation but benchmarking is advisable if you need accuracy. There are many factors beyond raw disk performance that can influence IOPs, in particular the RAID controller.

If you have the technical specifications for the disk, the quick calculation to determine IOPs is: 1 / (average latency + average seek time) = random IOPs.

The contributory factors:


Average latency is the time taken for the disk sector requested to rotate under the drive head.
Average seek time is how long it takes the drive head to locate itself over the disk track requested.
Rotational speed (quoted in revolutions per minute) isn't used directly in the calculation but affects the above. It is also the headline figure quoted in any drive specification.


While there is variation across drive models, you can apply a rough and ready figure to each of the common rotational speeds.


7200 RPM ~75 IOPs
10K RPM ~125 IOPs
15K RPM ~175 IOPs


With the majority of enterprise class RAID controllers, your read performance for common RAID levels (1/10/5/6) will broadly be in line with IOPs * number of disks. Cheaper controllers may impose a penalty. Write performance however is significantly effected by the chosen level:


RAID 1 &amp; 10 = IOPs / 2
RAID 5 = IOPs / 4
RAID 6 = IOPs / 6


For example, a RAID 10 array of 10 15k disks equates to:


(175 * 10) = 1750 IOPs read
(175 * 10) / 2 = 875 IOPs write


Of course, most workloads are a mix of read and write so its necessary to consider the r/w ratio to determine the capacity needed.