Final Word on IOPS in Azure

Hello Folks,

In the past few weeks I’ve been spending some of my spare time in trying to explore the capabilities of Azure where disk performance is concerned. I did that in response to some ITPros, that had expressed doubt that they could reproduce performances they were able to achieve on premises.

Well, let me tell you that I was amazed of the results. In the first posts:

We looked at the performance of Standard Disks in a simple and striped volumes. And in the second post:

We looked at the enhanced performance of the Premium storage disks. and now we will test a stripped volume with the 16 disks. I’m chasing the 50,000 IOPS threshold.

Let get going.

Attach the disks

In the new portal I browsed to the DS14Premium virtual machine that we created in a previous post and attached 16 disks (1023GB, and no caching) By default, disk caching policy is "Read-Only" for all the Premium data disks, and "Read-Write" for the Premium operating system disk attached to the VM. This configuration setting is recommended to achieve the optimal performance for your application’s I/Os. For write-heavy or write-only data disks (such as SQL Server log files), disable disk caching so that you can achieve better application performance.


Once the drives are attached, I connected to the virtual machine over RDP and configured a stripped volume using Disk Manager.


The formatting of the drives took a while, but when complete I was able to execute the same measurement as I had on the other tests.

I used SQLIO from

SQLIO is a free tool provided by Microsoft which can also be used to determine the I/O capacity of a given configuration. So using this tool I tested the IO profile of the server with one standard drive.

To test, I used the following command:

SQLIO -kRW -s60 -o8 -b8 f:\testfile.dat

The -k option, which specifies the I/O type (R for read operations and W for write operations)

The -s option to specify the test duration in seconds.

The -o, which indicates the number of I/Os that can be outstanding in a single thread. In this case, I’ve specified 8, so each thread can support up to eight outstanding I/O requests.Next we come to the -b option. This is the I/O block size in kilobytes (KB). In the example, I specified 64.

The last option in the command is -F, which points to the configuration file and the parameters defined within it. When you run the command, it creates the test file on the target drive and returns details about the execution, as shown in the following results:




Pierre RomanTwitter | Facebook | LinkedIn