Provisioned IOPS are a new EBS volume type designed to deliver predictable, high performance for I/O intensive workloads, such as database applications, that rely on consistent and fast response times.
One of the biggest complaints about Amazon Web Services has been disk performance. In order to get fast performance it has been necessary to use RAID 0 and spread writes across multiple EBS volumes. However, there is a problem with that approach, if one of those disks is having a negative performance impact; then the whole RAID group will perform poorly. If you lose a single disk in that RAID group, then there is a good chance that you have lost the entire logical volume. Many AWS customers have balked at the idea of risking instability for performance.
High I/O Instances
On 31 July 2012, AWS introduced High I/O Instances – these instances have two terabytes of local storage in the form of a solid state drive. (2 x SSD-based volumes each with 1024 GB of instance storage) Needless to say, these instances are fast and they have been benchmarked at up to 120,000 IOPS. However, they don’t provide quite the CPU throughput of other instance types currently provide, but the primary goal with this product is to address the perception that EBS storage isn’t fast enough in AWS.
There is one considerable downside, though – High I/O instances use instance store storage that’s local to each instance. This is commonly referred to as ephemeral storage and it is important to note that the storage disappears after an instance is stopped and started. There is no guarantee that your instance will start on the same server. After the instance starts back up, the local storage must be re-initialized to prevent your data being visible to another customer. High I/O instances are great for customers who need consistent, high random throughput storage access for databases that have resiliency across multiple servers. In short; high I/O instances are great for distributed databases.
The High I/O instances could be used with SQL Server by running an AlwaysOn Availability Group and creating asynchronous replicas on more durable storage using EBS volumes or by backing data up to S3 volumes. This approach carries the risk of data loss, however if you need high I/O throughput in AWS, then it’s one approach that you can take to achieve this goal.
Provisioned IOPS and EBS-optimized instances
Amazon released Provisioned IOPS EBS volumes, which is a more durable approach to high performance I/O storage. Regular EBS volumes can be expected to perform like a typical 7200 RPM drive: ~100 IOPS for random data access. In the past this is where RAID comes in – enterprise administrators created RAID volumes to spread I/O across multiple drives to achieve higher throughput. Unfortunately, this carries some risk of volume failure and again, one slow disk will make the entire RAID volume perform poorly.
Instead of resorting to RAID for performance, you can now provision drives and request to get a set performance level. Using the Provisioned IOPS feature, you can request space in AWS just like current EBS volumes, but now you can also specify guaranteed performance between 100 and up to 1000 IOPS. This volume is still over a 1Gbps ethernet connection and should be seen like network attached storage, so the total data throughput is limited, but actually you are able to get higher random I/O throughput with fewer drives. You can use this new feature on bigger instance types (m1.large, m1.xlarge, and m2.4xlarge) instances on any EBS volume, even the root volume (aka boot drives). You can launch selected Amazon EC2 instance types as “EBS-Optimized” instances. EBS-optimized instances deliver dedicated throughput between Amazon EC2 and Amazon EBS, with options between 500 Mbps and 1000 Mbps depending on the instance type used.
Things to Consider
You will want to know how fast your current storage performs and how much this might cost you to implement in AWS. There are a few things to measure, the first to look at is the theoretical maximum performance of your storage using SQLIO This will give you a fairly accurate idea about the performance of your storage in both MB/s and IOPS. You can combine this knowledge with information from Performance Monitor to gather actual usage metrics. This will help you determine if it is feasible to move into AWS.
The second and an even important question for most people is how much will it cost you. Provisioned IOPS cost $0.10 per Provisioned IOP per month. Keeping that in mind that 1,000 IOPS will cost $100 per month on top of a slightly higher cost per MB. At 100GB and 1,000 IOPS, an EBS volume will cost $112.5 per month. It’s expensive, but if you need guaranteed performance, it’s worth it.
You can get a more reliable estimate of your bill by using the AWS Simple Monthly Calculator.
Customers looking for fast storage now have multiple options for deploying SQL server. The less risk averse can use provisioned IOPS instances for guaranteed performance on highly durable storage. DBAs who are more open to risk can use the High I/O instances to get high throughput using local storage. As stated before, there is more risk involved, but there are solutions to help you alleviate that risk.
To learn more about EBS Provisioned IOPS, see the Amazon EBS detail page.