Amazon RDS 数据库实例存储 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon RDS 数据库实例存储

Amazon RDS for MySQL、MariaDB、PostgreSQL、Oracle 和 Microsoft SQL Server 的数据库实例使用 Amazon Elastic Block Store (Amazon EBS) 卷进行数据库和日志存储。

在某些情况下,您的数据库工作负载可能无法 100% 实现您预调配的 IOPS。有关更多信息,请参阅影响存储性能的因素

Amazon RDS 存储类型

Amazon RDS 提供三个存储类型:通用型 SSD(也称为 gp2 和 gp3)、预调配 IOPS SSD(也称为 io1)和磁性存储(也称为标准存储)。它们的性能特性和价格不同,这意味着您可以根据数据库工作负载需求定制存储性能和成本。您可以创建具有多达 64TiB 存储的 MySQL、MariaDB、Oracle 和 PostgreSQL RDS 数据库实例。您可以创建最多具有 16 TiB 存储的 SQL Server RDS 数据库实例。对于此存储量,请使用预配置 IOPS SSD 和通用型 (SSD) 存储类型。

下面的列表简要介绍这三个存储类型:

  • 通用型 SSD – 通用型 SSD 卷提供了经济高效的存储,适用于在中等规模的数据库实例上运行的各种工作负载。通用型存储最适合开发和测试环境。

    有关通用型 SSD 存储的更多信息(包括存储大小范围),请参阅通用型 SSD 存储

  • 预调配 IOPS SSD – 预调配 IOPS 存储符合输入/输出密集型工作负载(尤其是数据库工作负载)的需求,此类工作负载需要低输入/输出延迟和一致的输入/输出吞吐量。预调配 IOPS 存储最适合生产环境。

    有关预调配 IOPS 存储的更多信息(包括存储大小范围),请参阅预置 IOPS SSD 存储

  • 磁性 – Amazon RDS 还支持磁性存储以实现向后兼容。我们建议您采用通用型 SSD 或预配置 IOPS SSD 来满足所有新存储需求。磁性存储上的数据库实例允许的最大存储量少于其他存储类型的这种量。有关更多信息,请参阅磁性存储

当您选择通用型 SSD 或预调配 IOPS SSD 时,根据所选引擎和所请求的存储空间量,Amazon RDS 会自动跨多个卷进行条带化以提高性能,如下表所示。

数据库引擎 Ams RDS 存储大小 预调配的卷数
MariaDB、MySQL 和 PostgreSQL 小于 400GiB 1
MariaDB、MySQL 和 PostgreSQL 介于 400 到 64000GiB 之间 4
Oracle 小于 200GiB 1
Oracle 介于 200 到 64000GiB 之间 4
SQL Server 任何 1

当您修改通用型 SSD 或预调配 IOPS SSD 卷时,它会经历一系列状态。当卷处于 optimizing 状态时,卷性能介于源配置规范和目标配置规范之间。过渡卷的性能将不低于这两种规格中的最低者。有关卷修改的更多信息,请参阅《Amazon EC2 用户指南》中的监控卷修改进度

重要

当您修改实例的存储以使其从一个卷变为四个卷时,或者当您使用磁性存储修改实例时,Amazon RDS 不使用“弹性卷”功能。相反,Amazon RDS 会预调配新卷,并将数据从旧卷透明地移到新卷。此操作会同时消耗新旧卷的大量 IOPS 和吞吐量。根据卷的大小和修改期间存在的数据库工作负载量,此操作可能会消耗大量 IOPS,显著增加 IO 延迟,需要几个小时才能完成,而 RDS 实例保持为 Modifying 状态。

通用型 SSD 存储

通用型 SSD 存储提供了经济高效的存储,可用于大多数对延迟不敏感的数据库工作负载。

注意

与使用预置 IOPS 存储的实例相比,使用通用型 SSD 存储的数据库实例在创建只读副本、多可用区转换和数据库快照恢复之后会经历更久的延迟。如果您需要数据库实例在执行这些操作之后保持最低延迟,建议您使用预置 IOPS SSD 存储

Amazon RDS 提供两种类型的通用型 SSD 存储:gp2 存储gp3 存储

gp2 存储

当您的应用程序不需要高存储性能时,您可以使用通用型 SSD gp2 存储。gp2 存储的基准输入/输出性能为 3IOPS/GiB,最少具有 100IOPS。这种关系意味着较大的卷具有更好的性能。例如,一个 100GiB 卷的基准性能为 300 IOPS。一个 1000GiB 卷的基准性能为 3000 IOPS。一个 gp2 卷(5334GiB 及更大)的最高基准性能为 16000 IOPS。

大小低于 1000GiB 的单独 gp2 卷也有能力在延长的时间内突增至 3000 IOPS。卷 I/O 积分余额决定突增性能。有关卷 I/O 积分的更多信息,请参阅《Amazon EC2 用户指南》中的 I/O 积分和突增性能。有关基准性能和输入/输出积分余额如何影响性能的更详细说明,请参阅 Amazon 数据库博客上的博文 Understanding burst vs. baseline performance with Amazon RDS and gp2(了解 Amazon RDS 和 gp2 的突增与基线性能)。

许多工作负载从不会耗尽突增余额。不过,某些工作负载可能会用完 3000 IOPS 突增存储积分余额,因此,应计划存储容量以满足您的工作负载需求。

对于大于 1000GiB 的 gp2 卷,基准性能大于突增性能。对于这些卷,因为基准性能优于 3000 IOPS 突发性能,所以突发性能并不重要。但是,对于某些引擎和大小的数据库实例,存储跨四个卷进行条带化,可提供单个卷的四倍基准吞吐量和四倍突增 IOPS。下表显示了 Amazon RDS 数据库引擎上 gp2 卷的存储性能,包括阈值。

数据库引擎 RDS 存储大小 基准 IOPS 的范围 基准吞吐量的范围 突增 IOPS
MariaDB、MySQL 和 PostgreSQL 介于 20 到 399GiB 之间 100 - 1197 IOPS 128 - 250MiB/s 3000
MariaDB、MySQL 和 PostgreSQL 在 400 到 1335GiB 之间 1200 - 4005 IOPS 500 - 1000MiB/s 12000
MariaDB、MySQL 和 PostgreSQL 介于 1336 到 3999GiB 之间 4008 - 11997 IOPS 1,000 MiB/s 12000
MariaDB、MySQL 和 PostgreSQL 介于 4000 到 65536GiB 之间 12000 - 64000 IOPS 1,000 MiB/s 不适用*
Oracle 介于 20 到 199GiB 之间 100 - 597 IOPS 128 - 250MiB/s 3000
Oracle 介于 200 到 1335GiB 之间 600 - 4005 IOPS 500 - 1000MiB/s 12000
Oracle 介于 1336 到 3999GiB 之间 4008 - 11997 IOPS 1,000 MiB/s 12000
Oracle 介于 4000 到 65536GiB 之间 12000 - 64000 IOPS 1,000 MiB/s 不适用*
SQL Server 介于 20 到 333GiB 之间 100 - 999IOPS 128 - 250MiB/s 3000
SQL Server 介于 334 到 999GiB 之间 1002 - 2997 IOPS 250 MiB/s 3000
SQL Server 介于 1000 到 16384GiB 之间 3000 - 16000 IOPS 250 MiB/s 不适用*

*卷的基准性能超过了最大突发性能。

gp3 存储

通过使用通用型 SSD gp3 存储卷,您可以独立于存储容量自定义存储性能。存储性能是每秒输入/输出操作数(IOPS)与存储卷可执行读取和写入的速度(存储吞吐量)的组合。在 gp3 存储卷上,Amazon RDS 提供的基准存储性能为 3000 IOPS 和 125MiB/s。

对于除 RDS For SQL Server 之外的每个 RDS 数据库引擎,当 gp3 卷的存储大小达到特定阈值时,基准存储性能将提高到 12000 IOPS 和 500MiB/s。这是因为卷条带化,其中存储使用四个卷而不是一个卷。RDS for SQL Server 不支持卷条带化,因此没有阈值。

注意

单可用区和多可用区数据库实例支持通用型 SSD gp3 存储,但多可用区数据库集群不支持。有关更多信息,请参阅 配置和管理多可用区部署多可用区数据库集群部署

下表显示了 Amazon RDS 数据库引擎上 gp3 卷的存储性能,包括阈值。

数据库引擎 存储大小 基准存储性能 预配置的 IOPS 的范围 预调配的存储吞吐量范围
MariaDB、MySQL 和 PostgreSQL 小于 400GiB 3000 IOPS/125MiB/s 不适用 不适用
MariaDB、MySQL 和 PostgreSQL 400GiB 及更高 12000 IOPS/500MiB/s 12,000–64,000IOPS 500 – 4000MiB/s
Oracle 小于 200GiB 3000 IOPS/125MiB/s 不适用 不适用
Oracle 200GiB 及更高 12000 IOPS/500MiB/s 12,000–64,000IOPS 500 – 4000MiB/s
SQL Server 20 GiB–16 TiB 3000 IOPS/125MiB/s 3,000–16,000IOPS 125 – 1000MiB/s

对于除 RDS for SQL Server 之外的每个数据库引擎,当存储大小等于或高于阈值时,您可以预调配额外的 IOPS 和存储吞吐量。对于 RDS for SQL Server,您可以为任何可用存储大小预调配额外的 IOPS 和存储吞吐量。对于所有数据库引擎,您只需为额外的预调配存储性能付费。有关更多信息,请参阅 Amazon RDS 定价

尽管增加的预调配 IOPS 和存储吞吐量不依赖于存储大小,但它们是相互关联的。当您将 MariaDB 和 MySQL 的 IOPS 提高到 32000 以上时,存储吞吐量值会自动从 500MiB/s 增加。例如,当您在 RDS for MySQL 上将 IOPS 设置为 40000 时,存储吞吐量必须至少为 625MiB/s。Oracle、PostgreSQL 和 SQL Server 数据库实例不发生自动增加的情况。

RDS 上 gp3 卷的存储性能值具有以下限制:

  • 对于所有支持的数据库引擎,存储吞吐量与 IOPS 的最大比率为 0.25。

  • 在 RDS for SQL Server 上,IOPS 与已分配存储(以 GiB 为单位)的最小比率为 0.5。其他支持的数据库引擎没有最低比率。

  • 对于所有支持的数据库引擎,IOPS 与已分配存储的最大比率为 500。

  • 如果您使用存储自动扩展,IOPS 和最大存储阈值(以 GiB 为单位)之间的比率也同样适用。

    有关存储自动扩展的更多信息,请参阅 使用 Amazon RDS 存储自动扩展功能自动管理容量

预置 IOPS SSD 存储

对于需要快速且一致的 I/O 性能的生产应用程序,我们建议使用预调配 IOPS 存储。预配置 IOPS 存储是一种存储类型,它提供了可预测的性能以及一致的低延迟。预调配 IOPS 存储针对要求性能一致的联机事务处理(OLTP)工作负载进行了优化。预配置 IOPS 可帮助这些工作负载的性能优化。

在创建数据库实例时,您可以指定 IOPS 速率和卷的大小。Amazon RDS 为数据库实例提供该 IOPS 速率,直到您对其进行更改。

io1 存储

对于 I/O 密集型工作负载,您可以使用预调配 IOPS SSD io1 存储,并实现高达 256,000 次每秒 I/O 操作(IOPS)。io1 卷的吞吐量因每个卷的预调配 IOPS 量和正在执行的 IO 操作的规模而异。有关 io1 卷的吞吐量的更多信息,请参阅《Amazon EC2 用户指南》中的预调配 IOPS 卷

下表显示了每个数据库引擎的预调配 IOPS 范围和最大吞吐量以及存储大小范围。

数据库引擎 存储大小的范围 预配置的 IOPS 的范围 最大吞吐量
MariaDB、MySQL 和 PostgreSQL 介于 100 到 399GiB 之间 1000 – 19950 IOPS 500 MiB/s
MariaDB、MySQL 和 PostgreSQL 介于 400 到 65536GiB 之间 1000–256000 IOPS 4,000 MiB/s
Oracle 介于 100 到 199GiB 之间 1000 – 9950 IOPS 500 MiB/s
Oracle 介于 200 到 65536GiB 之间 1000–256000 IOPS 4,000 MiB/s
SQL Server 介于 20 到 16384GiB 之间 1000–64000 IOPS 1,000 MiB/s
注意

对于 SQL Server,仅可在基于 Nitro 的实例(m5*、m6i、r5*、r6i 和 z1d 实例类型)上确保最高 64000 IOPS 的性能。其他实例类型可确保最高 32000 IOPS 的性能。

对于 Oracle,您只能在 r5b 实例类型上预置最高 256000 IOPS 的性能。

IOPS 和存储大小范围具有以下约束:

  • 在 RDS for SQL Server 上,IOPS 与已分配存储(以 GiB 为单位)的比率必须为 1–50,而在其他 RDS 数据库引擎上必须为 0.5–50。

  • 如果您使用存储自动扩展,IOPS 和最大存储阈值(以 GiB 为单位)之间的比率也同样适用。

    有关存储自动扩展的更多信息,请参阅 使用 Amazon RDS 存储自动扩展功能自动管理容量

将预置 IOPS 存储与多可用区部署或只读副本组合

对于生产 OLTP 使用案例,我们建议您使用多可用区部署提高容错能力和预配置 IOPS 存储,以便实现快速可预测性能。

您还可以将预配置 IOPS SSD 存储与 MySQL、MariaDB 或 PostgreSQL 的只读副本一起使用。只读副本的存储类型与主数据库实例上的存储类型无关。例如,您可能需要对具有使用预配置 IOPS SSD 存储的主数据库实例的只读副本使用通用型 SSD 来降低成本。不过,在这种情况下,与主数据库实例和只读副本均使用预配置 IOPS SSD 存储的配置相比,只读副本的性能可能会不同。

预置 IOPS 存储成本

通过预配置 IOPS 存储,您需要为预配置的资源付费,因此在规定月份中无论是否使用这些资源,您都需为此支付费用。

利用 Amazon RDS 预置 IOPS SSD 存储获得最佳性能

如果您的工作负载是 I/O 限制的,则使用预配置 IOPS SSD 存储可以增加系统能并发处理的 I/O 请求数。并发度提高可降低延迟,因为 I/O 请求在队列中占用的时间变少。降低延迟可加快数据库提交,从而缩短响应时间并提高数据库吞吐量。

预配置 IOPS SSD 存储提供了一种通过指定 IOPS 来预留 I/O 容量的方法。不过,与任何其他的系统容量属性一样,负载下的最大吞吐量会受到系统首先消耗的资源的限制。该资源可能是网络带宽、CPU、内存或数据库内部资源。

有关充分利用预置 IOPS 卷的更多信息,请参阅 Amazon EBS 卷性能

比较固态驱动器(SSD)存储类型

下表显示了 Amazon RDS 使用的 SSD 存储卷的使用情况和性能特征。

特征 预调配 IOPS(io1) 通用型(gp3) 通用型(gp2)
描述

一致的存储性能(IOPS、吞吐量、延迟)

专为延迟敏感型、事务工作负载而设计

可灵活地独立预调配存储、IOPS 和吞吐量

平衡各种事务性工作负载的性价比

提供可突增的 IOPS

平衡各种事务性工作负载的性价比

使用案例

需要最多 256000IOPS 的持续 IOPS 性能的事务性工作负载

在开发/测试环境中,在中型关系数据库上运行的广泛工作负载

在开发/测试环境中,在中型关系数据库上运行的广泛工作负载

延迟

一位数毫秒,在 99.9% 的时间内始终提供

一位数毫秒,在 99% 的时间内始终提供

一位数毫秒,在 99% 的时间内始终提供

卷大小

100GiB–64TiB(在 RDS for SQL Server 上为 16TiB)

20GiB–64TiB(在 RDS for SQL Server 上为 16TiB)

20GiB–64TiB(在 RDS for SQL Server 上为 16TiB)

最大 IOPS 256,000(在 RDS for SQL Server 上为 64,000) 64,000(在 RDS for SQL Server 上为 16,000)

64,000(在 RDS for SQL Server 上为 16,000)

注意

您无法直接在 gp2 存储上预调配 IOPS。IOPS 因分配的存储大小而异。

最大吞吐量 根据预调配 IOPS 卷扩展至最多 4,000MB/s 预调配多达 4000MB/s 的额外吞吐量(对于 RDS for SQL Server,为 1000MB/s) 1000MB/s(RDS for SQL Server 上为 250MB/s)
Amazon CLI 及 RDS API 名称 io1 gp3 gp2

磁性存储

Amazon RDS 还支持磁性存储以实现向后兼容。我们建议您采用通用型 SSD 或预配置 IOPS SSD 来满足所有新存储需求。下面是磁性存储的一些限制:

  • 不允许您在使用 SQL Server 数据库引擎时扩展存储。

  • 不支持存储自动伸缩。

  • 不支持弹性卷。

  • 限制为 3 TiB 的最大大小。

  • 限制为最大 1,000 IOPS。

监控存储性能

Amazon RDS 提供了可供您用来确定如何执行数据库实例的多种指标。您可以在 Amazon RDS 管理控制台中的实例的摘要页上查看这些指标。您还可使用 Amazon CloudWatch 监控这些指标。有关更多信息,请参阅“在 Amazon RDS 控制台中查看指标”。增强监测提供了更详细的 I/O 指标;有关更多信息,请参阅使用增强监控来监控操作系统指标

以下指标对于监控数据库实例的存储很有帮助:

  • IOPS – 每秒完成的 I/O 操作数。该指标作为给定时间间隔内 IOPS 平均值进行报告。Amazon RDS 每分钟分别报告一次读取和写入 IOPS。总 IOPS 是读取和写入 IOPS 的总和。IOPS 的典型值在零到每秒数万次之间。

  • 延迟 – 从提交 I/O 请求到完成请求之间的已用时间。该指标作为给定时间间隔内延迟平均值进行报告。Amazon RDS 每分钟分别报告一次读取和写入延迟。典型的延迟值以毫秒 (ms) 为单位。

  • 吞吐量 – 每秒传输到磁盘或从磁盘中传输的字节数。该指标作为给定时间间隔内吞吐量平均值进行报告。Amazon RDS 每分钟分别报告一次读取和写入吞吐量,所用单位为每秒兆字节 (MB/s)。吞吐量的典型值在零到 I/O 通道的最大带宽之间。

  • 队列深度 – 队列中等待处理的 I/O 请求数。这些是由应用程序提交但由于设备忙于处理其他 I/O 请求而尚未发送到设备的 I/O 请求。在队列中等待所花的时间是延迟和处理时间的一部分(不以指标形式提供)。该指标作为给定时间间隔内队列深度平均值进行报告。Amazon RDS 每分钟报告一次队列深度。队列深度典型值在零至数百之间。

测量的 IOPS 值与单个 I/O 操作的大小无关。这意味着,在您度量输入/输出性能时,确保查看实例的吞吐量,而不是输入/输出操作数量。

影响存储性能的因素

系统活动、数据库工作负载和数据库实例类可能影响存储性能。

系统活动

以下系统相关活动圴使用 I/O 容量,并且可能会在执行这些活动时降低数据库实例性能:

  • 多可用区备用创建

  • 创建只读副本

  • 创建存储类型

数据库工作负载

在某些情况下,数据库或应用程序设计导致并发问题、锁定或其他形式的数据库争用。在这类情况下,您可能无法直接使用所有预配置的带宽。此外,您可能遇到以下与工作负载相关的情况:

  • 已到达基础实例类型的吞吐量限制。

  • 因为应用程序没有驱动足够的输入/输出操作,所以队列深度始终小于 1。

  • 您在数据库中遇到查询争用,即使部分 I/O 容量未使用也是如此。

在某些情况下,系统资源均未达到或接近限值且添加线程不会增加数据库事务速率。在这种情况下,瓶颈很可能是数据库中的争用。最常见的形式为行锁和索引页锁争用,但也有很多其他的可能性。如果您遇到的是这种情况,请征询数据库性能优化专家的意见。

数据库实例类

要让 Amazon RDS 数据库实例发挥最大性能,请选择具有足够带宽的最新一代实例类型来支持您的存储类型。例如,您可以选择 Amazon EBS 优化实例和具有 10GB 网络连接的实例。

重要

您可能会看到 IOPS 性能低于您可以使用 RDS 预置的最大值,具体取决于所使用的实例类。有关数据库实例类的 IOPS 性能的特定信息,请参阅《Amazon EC2 用户指南》中的 Amazon EBS 优化实例。我们建议您在为数据库实例设置预置 IOPS 值之前,先确定实例类的最大 IOPS。

我们建议您使用最新一代的实例以获得最佳性能。上一代的数据库实例还具有较低的存储上限。

一些较旧的 32 位文件系统的存储容量可能较低。要确定数据库实例的存储容量,可以使用 describe-valid-db-instance-modifications Amazon CLI 命令。

以下列表显示了大多数数据库实例类可以为每个数据库引擎扩展到的最大存储:

  • MariaDB – 64TiB

  • Microsoft SQL Server – 16TiB

  • MySQL – 64TiB

  • Oracle – 64TiB

  • PostgreSQL – 64TiB

下表显示了最大存储空间的一些例外情况(以 TiB 为单位)。所有 RDS for Microsoft SQL Server 数据库实例的最大存储空间为 16TiB,因此没有 SQL Server 的条目。

实例类 MariaDB MySQL Oracle PostgreSQL
db.m3 – 标准实例类
db.m3.2xlarge 不适用 6 不适用 6
db.m3.xlarge 不适用 6 不适用 6
db.m3.large 不适用 6 不适用 6
db.m3.medium 不适用 32 不适用 32
db.t4g – 具爆发能力的实例类
db.t4g.medium 16 16 不适用 32
db.t4g.small 16 16 不适用 16
db.t4g.micro 6 6 不适用 6
db.t3 – 具爆发能力的实例类
db.t3.medium 16 16 32 32
db.t3.small 16 16 32 16
db.t3.micro 6 6 32 6
db.t2 – 具爆发能力的实例类
db.t2.medium 32 32 不适用 32
db.t2.small 16 16 不适用 16
db.t2.micro 6 6 不适用 6

有关支持的所有实例类的更多详情,请参阅上一代数据库实例