It’s All About the IOPS, Silly…

September 18 2008 by Michael B. Smith, MCSE/Exchange MVP
google ad 120x240 white banner - Exchange pages

One of the common areas that people tend to overlook when designing an Exchange Server solution is the design of the disk subsystem. And if you didn’t design your disk subsystem well, it is very likely that your Exchange Server will not perform well.

In Exchange Server 2003 and in earlier versions, the read:write ratio of the Exchange database was about 4:1. In Exchange Server 2007, it’s about 1:1 for a properly configured Exchange server. This improvement comes primarily at the expense of memory - Exchange 2007 needs much more memory to be performant than did Exchange 2003.

In Microsoft’s tests, Exchange 2007 requires 73% less IOPS than Exchange 2003. However, Exchange still needs to be able to perform lots of Input and Output Operations Per Second (IOPS). In Exchange 2007, a light email user will, on average, require 0.11 IOPS. A medium user will require 0.18 IOPS. A heavy user will require 0.32 IOPS and a very heavy user will require 0.48 IOPS. Note that this is just for the mailbox database and that database I/O is completely random. The transaction log will require about three-quarters of one-half of that per user (that is, 38% of the IOPS per user).

Consider an Exchange Server with 100 users; all falling in the very heavy user range. The database IOPS is 0.48 * 100 = 48 IOPS. The transaction log IOP is 48 * 0.38 = 19 (rounding up). That really doesn’t sound like much, does it?

However, consider this: your average 7,200 RPM SATA drive will only provide you with approximately 35 IOPS. A 10K RPM SATA drive will provide you with about 50 IOPS. This should make it immediately clear that SATA is not a high-performing solution where a single drive is concerned.

For SCSI 10K RPM, the IOPS per drive value is about 85 IOPS. For SCSI 15K RPM, the IOPS per drive value is about 110 IOPS. This goes to show you that SCSI is at least twice as fast as SATA, but that still isn’t enough for large installations. So what do you do?

Enter RAID. RAID stands for Redundant Arrays of Independent Disk. You can create large pools of disk using RAID. Generally, mirrors (RAID-1) and RAID-5 (where you spend one disk on parity information) are the most commonly seen types of RAID. However, we aren’t here to talk about RAID - except how it allows us to create more highly performing disk subsystems.

Using RAID-1, read performance is equal to (IOPS * N), where N is the number of disks in the array and IOPS is the total IOPS available from a single disk. Write performance is (IOPS * N / 2). Note that N must always be an even number (such as 2, 4, 6, 8…) with RAID-1. However, the amount of disk available is (GB * N / 2), where GB is the amount of disk space available on a single disk.

Using RAID-5, read performance is equal to (IOPS * (N - 1)). Write performance is (IOPS * ((N - 1)/ 4)). Note that N can be any number higher than 2. The amount of disk space is (GB * (N - 1)).

So, once you have calculated how many IOPS you need, you can easily determine how many disks you would need in a RAID configuration. Given RAID, even SATA disk can be used to meet high IOPS requirements. And while RAID-1 gives better IOPS more quickly, it also requires more physical spindles than RAID-5.

As a final note, to calculate the IOPS for a particular physical disk, you will need the specification sheet from the manufacturer. On it, hunt for the number for latency (normally between 1.0 and 2.0 ms) and the number for access (normally around 15 - 20 ms). Add the two together. Divide 1,000 by that value to get IOPS for completely random access. For example, if latency is 2 ms and access is 20 ms, then (1000 / 22) is equal to 45 IOPS.

Links

Exchange Server 2007 Storage Technology
http://technet.microsoft.com/en-us/library/bb738146%28EXCHG.80%29.aspx 

Mailbox Server Role Storage Requirements Calculator
http://msexchangeteam.com/archive/2007/01/15/432207.aspx 

More Information