RDS IOPS limitations

0

We have a problem with the performance of PostgreSQL RDS instance running on gp3 storage. As you can see from the attached diagrams, in an recent incident it exhausted EBSIOBalance% while the number of IOPS never exceeded approx 18k, although we have provisioned 25k IOPS for this instance. This resulted in a steep surge of a number of active connections/sessions and exhausted freeable memory within minutes, leading to a system crash. It is not clear to us why it used burst IOPS without exceeding baseline IOPS. On the other hand, we now see that documentation states that gp3 storage can have max. 16k IOPS/volume. Could you please explain what is happening and why we are able to provision and pay more IOPS if they cannot actually be used?

Additionally, we are considering increasing the size of our RDS instance from m5.2xlarge to m5.4xlarge in order for us to be able to fully use IOPS that we have provisioned. There are some resources on AWS Docs indicating that our current RDS instance type (m5.2xlarge) supports maximum of 18750 IOPS for 30 minutes at least once every 24 hours (which is extremely misleading since the system allowed us to provision 25k IOPS without any disclaimer indicating that we'll not be able to reach that due to other limitations) but we do not see such limitation for m5.4xlarge. Can you confirm for us that if we switch to the larger instance we will be able to fully utilize all provisioned IOPS we have configured on our GP3 storage attached to RDS instance.

Are there other instance types that may suit our needs better than m5?

EBSIOBalance% / IOPS

1 Answer
0

EBSIOBalance% is a measure of the Burst IOPS consumed on the ec2 instance, not the gp3 volumes. You should not let the EBS IOPS exceed the max for the instance type. It looks like your workload requires more than the baseline of 12k so a 4xl might be a better choice. If you need actually 25k then 8xl will work.

$ aws ec2 describe-instance-types --instance-types m5.2xlarge m5.4xlarge  m5.8xlarge  --query "InstanceTypes[*].[InstanceType, EbsInfo.EbsOptimizedSupport, EbsInfo.EbsOptimizedInfo]"
[
    [
        "m5.4xlarge",
        {
            "BaselineIops": 18750,
            "MaximumIops": 18750
        }
    ],
    [
        "m5.2xlarge",
        {
            "BaselineIops": 12000,
            "MaximumIops": 18750
        }
    ]
    [
        "m5.8xlarge",
        {
            "BaselineIops": 30000,
            "MaximumIops": 30000
        }
    ]
]
AWS
MODERATOR
philaws
answered 8 months ago
profile pictureAWS
EXPERT
reviewed 8 months 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