Storage I/O Performance plays a significant role in determining overall application end user response times and perceived user latency. Enormous growth in unstructured data, spurred by the evolution of various applications and newer application architectures for consolidated, virtualized, cloud scale data center infrastructures, have completely changed I/O workload patterns. These IOPS demanding workloads are no match for ‘capacity’ rich hard disks.  Nor can these be supported on all-flash storage given the latter’s capacity limitations and cost barriers.  How can you smartly leverage solid state drives (SSD) to boost OLTP application I/O performance (for e.g., MySQL, MongoDB) in a holistic, non-disruptive and cost effective manner, without throwing away your hard disk but utilizing it for capacity? Let’s take a closer look on available options.

One: Memory-Based Caching

Typically, the best application performance and end user response times are achieved when the application’s entire active working data set fits within a server’s available main memory (RAM). Data in memory is readily accessible right when the application demands it. The ability to satisfy most of application I/O needs, by having more of application’s working set in RAM, is one of the top performance tuning considerations for system administrators. However, achieving this goal is a real challenge. This is a direct consequence of the rise in the number of applications that an enterprise deals with today as compared to say few years ago.  Also, there is Big Data and widely varying working set sizes as multiple applications are consolidated on the same server. This drives up the total amount of RAM needed to cache an application’ working set, making it a costly proposition.

Two: Over-Provisioning Storage

Use of separate disks and spindles for various applications or application components is an alternative way to reduce the latency impact of data fetches from the hard disk. Another commonly used option is to create a RAID by bundling multiple disks together. These options are not only complex but require specialized system administrators who understand application I/O nuances and have deep infrastructure expertise.  This approach also adds extra management overhead for enterprise IT resulting in wasted storage capacity due to overprovisioning. There is also the reality that keeping application components on separate disk spindles does not add much value for OLTP workloads as their IO access patterns have a high percentage of random reads and writes anyway.

Three: All-Flash Storage

Another approach to addressing Application I/O performance is the use of faster all-flash storage as a rip and replace solution for the much slower spinning hard disk drives. However, this can be both disruptive and expensive as it requires all data to be migrated to all-flash storage, in case you have legacy data to deal with.  Or you choose to use all-flash for newer applications or newer application data and keep older data on hard disks. Then then depending upon your data access patterns and usage, the perceived performance may be very jittery.  Remember, flash is an evolving technology with much lower reliability as compared to hard disks and it is more than 10 times as expensive.

Four: Flash-Based Caching

A cost effective alternative is to use a small capacity of flash as a cache device.  This is much less expensive than growing the server main memory or an all-flash storage option. A case in point here is MongoDB ETL jobs where most of the clusters are made up of commodity hardware. It may not be acceptable cost-wise or feasible capacity-wise to hold an entire MongoDB data store within SSD storage attached to each node.

The challenge though is that traditional server-side SSD caching solutions address I/O performance cost effectively but are not as effective, since their focus is limited to storage at the server or VM level.  These caching solutions have no intelligence about application’s I/O behavior patterns or the business needs driving the application I/O requests. They also require very large cache capacities in order to be effective. However, this makes them sub-optimal and inefficient for enterprise use, beyond the very basic and simplest of deployments.

A new generation flash caching solutions is emerging however that uses application performance acceleration technology to provide much higher performance boost, with a smaller amount of SSD capacity used as cache. At the application level, these solutions provide per application insights as to the IO patterns of specific components such as tables or indexes of a database that speed transaction processing or query response times. Beyond block level caching, this brings in advantages of predictive caching and flexibility to choose some or all components at the application level for a more precise and efficient I/O performance acceleration.  So if your index file or select tables are able to fit in an available SSD drive, then you can accelerate just these components. The benefit is that even though they are a small percentage of your total working data set these are the most important components to improving application performance. You may likely find you are able to achieve nearly the same performance caching 20-30{00650960c7c98e0cfb19b413dfe1b11628fd22333dea5da8eda402d86148a18a} of the most critical elements of your working set as you would placing the entire working set into all-flash storage, a much more expensive proposition.