Amazon RDS: What are IO Requests?

Solution 1:

Ah, Amazon Web Services. One of the biggest moneysinks available. Very good, but not always cheap. Actually, almost never cheap, and always difficult to estimate expenses.

An IO request is a disk-operation. Be that a read, or a write, you're basically being charged with how much data you're getting off their system. It's insane.

You can estimate the IO Requests you're making, by looking at iostat.

800,000,000 IOrequests in 7 days.. That's ~=1300 IOPS . Wow. That's some wickedfast performance.

As an example, a medium sized website database might be 100 GB in size and expect to average 100 I/Os per second over the course of a month. This would translate to $10 per month in storage costs (100 GB x $0.10/month), and approximately $26 per month in request costs (~2.6 million seconds/month x 100 I/O per second * $0.10 per million I/O).

From http://aws.amazon.com/ebs/ about 90% of the way down the page

If you really want to reduce what this is costing you, it might be time to look at whether RDS is really the best fit for your application and project budget.

If you've only got 6k hits a day, you might do better on cost and performance with a dedicated server (preferably 2 of em, one for DB, one for web services). It's actually a bit more difficult to make that call as you've not said too much more about your application.

Solution 2:

I have an RDS instance that is costing me a lot of money.

"Cloud services" does not mean that stuff is going to cost you pennies. Basically, an I/O request is anything (i.e. a database or an index page) that needed to be fetched from disk. If you have a large database and queries using full table scans, this is by no means surprising. You might consider looking for queries using unindexed columns for filtering by enabling the option to log the "unindexed" queries to the MySQL slow log and adding indexes for the appropriate columns. As you do not have the option to edit the config file directly, use the RDS parameter group configuration to set log-queries-not-using-indexes and query the mysql.slow_log table for log entries.

Also, consider running the MySQL tuning primer script from your AWS instance against the database instance for a general performance analysis to see if a larger instance would help matters due to a larger amount of memory available for caching, alleviating the load on the disk. The script evaluates a number of configuration parameters and performance counters to give some information about possible bottlenecks and provide some generic recommendations.