Understanding RDS throughput limits


I have trouble understanding what throughput limit(s) my RDS instance is supposed to have. Based on this blog post:

An Amazon RDS instance has two types of throughput limits: Instance level and EBS volume level limits.

You can monitor instance level throughput with the metrics WriteThroughput and ReadThroughput. WriteThroughput is the average number of bytes written to disk per second. ReadThroughput is the average number of bytes read from disk per second. For example, a db.m4.16xlarge instance class supports 1,250-MB/s maximum throughput. The EBS volume throughput limit is 250 MiB/S for GP2 storage based on 16 KiB I/O size, and 1,000 MiB/s for Provisioned IOPS storage type. If you experience degraded performance due to a throughput bottleneck, you should validate both of these limits and modify the instance as needed.

My RDS instance is of db.r6g.8xlarge type, which according to https://aws.amazon.com/rds/instance-types/ has 9000 Mbps (= 1125 MB/s) EBS dedicated bandwidth. On the other hand, according to https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html the underlying gp2 volume (5TB size) has a 250 MB/s throughput limit. So how are these two limits applied? Should I be able to reach close to 1125 MB/s or am I restricted to 250 MiB/s because of gp2 volume limit? In CloudWatch, during bulk write operations I have observed Total (Read + Write) Throughput momentarily reach ~ 1000 MB/s but mostly it was steady around 420 MB/s, i.e. somewhere in between the two limits.

2 Answers
Accepted Answer

Hi @nikos64,

The volume and instance limits are separate. The throughput bottleneck will be dependent on which limit is reach first.

For example :

  • 1/ A db.r6g.8xlarge instance with limit of 1125 MB/s with 1(single) gp2 volume attached to it, will have a 250 MB/s throughput limit.
  • 2/ A db.r6g.8xlarge instance with limit of 1125 MB/s with 4 gp2 volumes attached to it, will have a limit of 1000MBs ( 4 x 250MB/s).
  • 3/ A db.r6g.8xlarge instance with limit of 1125 MB/s with 6 gp2 volumes attached to it, will have a limit of 1125MBs as it is less than the aggregated volume throughput limit ( 6 x 250MB/s)

Note: 250MB/s throughput limit is for large gp2 volumes. Smaller ones will have a lower limit depending on size.

How many volumes are attached to your RDS db.r6g.8xlarge instance type?

answered 2 years ago
  • Thank you for your informative reply. I have selected 5000 GiB gp2 storage for my RDS instance, with option to autoscale at max 6000 GiB. How can I see how many volumes are attached? Is it part of enhanced monitoring?

  • Hi Nikos,

    This is indeed part of enhanced monitoring. RDS does not directly expose the individual volumes. If you look in the enhanced monitoring metrics in Cloudwatch, there is a "Physical Device I/O" category. From this you can select reads/s, writes/s. This will show per device metrics from which you can infer the number of volumes in your RAID0 stripe. (credit for the answer goes to Phil - see https://forums.aws.amazon.com/thread.jspa?threadID=300605).

    From my own tests, it looks like a 5000 GiB RDS MySQL database instance will spread data across 4 volumes. This correlates with the numbers you are seeing - peak total throughput around 1000 MB/s.

  • Thank you kdavyd, very informative. So, according to this: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html , if I select Provisioned IOPS and provision e.g. 33000 IOPS I should expect a max throughput of 1000 MiB/s, regardless the number of volumes, right?


In addition to the previous answer by my colleague, hopefully these points will be helpful:

Most of these limits are evaluated/measured on very small time intervals, so we normally recommend that RDS customers do enable and set RDS Enhanced Monitoring to a one-second data gathering interval, too - as your workload might reach the limits only briefly due to other constraints like locking, consistency or durability features from the database engine. By the way, Enhanced Monitoring will also capture data for each EBS volume on the instance.

And, if the instance is not reaching one of its limits, keep in mind that the client machine(s) might be the bottleneck, too.

Lastly: In a recently restored RDS instance, lazy loading (A.K.A. EBS Initialization) is another factor that affects IO performance.

answered 2 years ago

You are not logged in. Log in to post an answer.

A good answer clearly answers the question and provides constructive feedback and encourages professional growth in the question asker.

Guidelines for Answering Questions