我正在使用 AWS i3.2xlarge
EC2 实例,面临 10K IOPS 的限制。我想知道这是为什么?
我只能在 NVMe 实例存储上写入。无论我做什么,都无法超越这个限制。我以为I3 级实例可以远远超出这个范围吗?
我是不是遗漏了什么?我需要更大的实例才能达到更高的 IOPS 吗?在尝试提高 IOPS 之前,我想了解这是这些实例的典型限制还是我的设置有问题?
有人能用这种类型的实例实现更高的吞吐量吗?为什么限制是 10K IOPS?原因是什么?如何超越它?
注意:我正在运行一个数据库应用程序,并对其提出许多更新请求。
答案1
你是100% 确定你写信给本地 SSD 存储?
听起来你可能不小心使用 EBS 卷,10K IOPS 限制表明......
如何检查:在亚马逊Linux 2在i3.2xlarge
NVMe 实例存储上/dev/nvme0n1
,而 EBS 卷是/dev/xvd*
。检查您正在使用/基准测试的目录中安装了什么设备:
[root@ip-172-31-41-210 ~]# mount
/dev/xvda1 on / type xfs (rw,noatime,attr2,inode64,noquota)
/dev/xvdba1 on /ebs-storage type ext4 (rw,relatime,data=ordered)
/dev/nvme0n1 on /local-storage type ext4 (rw,relatime,data=ordered)
在这里,我已将第二个 EBS 卷安装为,/ebs-storage
并将 NVMe 实例存储安装为/local-storage
。
请注意NVMe 磁盘必须明确格式化(mkfs
) 和安装才能使用!默认情况下,实例仅以 EBS 支持的根磁盘并且快速的NVMe磁盘没有被使用!
希望有帮助:)
答案2
AWS 上的此页面据称,i3.2xlarge 可以实现 412,500 随机读取 IOPS 和 180,000 写入 IOPS。相比之下,i3.16Xlarge 可以实现 330 万随机读取 IOPS 和 140 万写入 IOPS。
它还说
随着您为实例填充基于 SSD 的实例存储卷,您可以实现的写入 IOPS 数量会减少。这是因为 SSD 控制器必须进行额外的工作来查找可用空间、重写现有数据并擦除未使用的空间以便可以重写。此垃圾收集过程会导致 SSD 内部写入放大,以 SSD 写入操作与用户写入操作的比率表示。如果写入操作不是 4,096 字节的倍数或未与 4,096 字节边界对齐,则性能下降幅度会更大。如果您写入较少量的字节或未对齐的字节,SSD 控制器必须读取周围的数据并将结果存储在新位置。这种模式会导致写入放大显著增加、延迟增加,并大幅降低 I/O 性能。
建议您运行基准测试工具来查看可以达到多少 IOPS - 抱歉,我无法推荐任何工具。之后,您可能需要针对实例优化数据库。互联网上可能有关于针对 i3 实例优化软件的文章。
否则,联系 AWS 支持是个好建议。他们的支持非常出色。您必须为他们的支持付费,尽管开发人员级别的支持并不那么昂贵。
答案3
在 AWS 上,IOPS 速率受到限制每卷。
如果你需要更高的吞吐量,最好使用较小体积的数量较多而不是一个巨大的卷。然后,您可以将这些卷放入 SW-RAID 中,或者配置您的软件以使用多个数据存储。