Amazon Relational Database Service
用户指南 (API Version 2014-10-31)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

Amazon RDS 的存储

大多数 Amazon RDS 的数据库和日志存储采用 Amazon Elastic Block Store (Amazon EBS) 卷。例外情况是 Amazon Aurora,它使用我们的专有存储系统。根据所请求的存储量,Amazon RDS 自动将多个 Amazon EBS 卷分成条带,以增强 IOPS 性能。Amazon RDS 提供三种存储类型,以及一系列存储和性能选项。

Amazon RDS 存储类型

Amazon RDS 提供 3 种存储类型:通用型 (SSD)、预置 IOPS (每秒输入/输出操作数) 和磁性。它们的性能特点和价格不同,您可根据数据库工作负载要求定制您所需的存储性能并支付相应费用。当使用预置 IOPS 和通用型 (SSD) 存储类型时,您现在可以创建最多具有 6 TB 存储的 MySQL、MariaDB、PostgreSQL 和 Oracle RDS 数据库实例,以及最多具有 16 TB 存储的 Microsoft SQL Server RDS 数据库实例。

  • 通用型 (SSD) - 通用型 (SSD) (也称作 gp2) 卷提供适用于广泛工作负载的经济高效的存储。这些卷可以提供几毫秒的延迟,能够突增至 3000 IOPS 并维持一段较长的时间。在最小 100 IOPS (以 33.33 GiB 及以下) 和最大 10000 IOPS (以 3334 GiB 及以上) 之间,基准性能以每 GiB 卷大小 3 IOPS 的速度线性扩展。此存储类型非常适合中小型数据库。

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

  • 预配置 IOPS – 预配置 IOPS 存储符合 I/O 密集型工作负载 (尤其是数据库工作负载) 的需求。此类工作负载对随机存取 I/O 吞吐量的存储性能和一致性十分敏感。您指定要分配的存储量,然后指定所需的专用 IOPS 量。Amazon RDS 在指定年份的超过 99.9% 的时间里可提供 10% 以内的预配置 IOPS 性能。

    有关预置 (IOPS) 存储的更多信息 (包括存储大小范围),请参阅用于提高性能的 Amazon RDS 预配置 IOPS 存储

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

有多种因素会影响 Amazon EBS 卷的性能,如实例配置、I/O 特性和工作负载需求。有关充分利用预配置 IOPS 卷的更多信息,请参阅 Amazon EBS 卷性能

对于现有 MySQL、MariaDB、PostgreSQL 和 Oracle 数据库实例,在扩展存储时,您可能会看到部分 I/O 的容量有所增加。您无法更改 SQL Server 数据库实例的存储容量或存储类型。

性能指标

Amazon RDS 提供了可供您用来确定如何执行数据库实例的多种指标。您可通过选择数据库实例并单击 Show Monitoring 来在 RDS 控制台中查看这些指标。您还可使用 Amazon CloudWatch 监控这些指标。有关更多信息,请参阅 查看数据库实例指标。增强监控可提供更详细的 I/O 指标;有关更多信息,请参阅增强监控

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

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

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

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

有关 Amazon RDS 存储的情况

以下几点是您应了解的有关 Amazon RDS 存储的重要实际情况:

  • 最大通道带宽与数据库实例类相关。

  • 无法减少为数据库实例分配的存储。

  • 虽然预配置 IOPS 可与最高 256 KB 的 I/O 大小一起使用,但大部分数据库一般不使用如此高的 I/O。小于 32 KB 的 I/O 请求将作为单个 I/O 进行处理;例如,1000 个 16 KB I/O 请求的处理方式与 1000 个 32 KB 请求的处理方式相同。超过 32 KB 的 I/O 请求将使用多个 I/O 请求;预配置 IOPS 占用是处理超过 32 KB 的 I/O 请求的线性函数。例如,48 KB I/O 请求占用存储容量的 1.5 个 I/O 请求;64 KB I/O 请求占用存储容量的 2 个 I/O 请求,依此类推。更多有关预配置 IOPS 的详细信息,请参阅 用于提高性能的 Amazon RDS 预配置 IOPS 存储

    请注意,I/O 大小不影响指标报告的 IOPS 值,IOPS 值仅基于随时间变化的 I/O 数量。也就是说,如果 I/O 大小超过 32 KB,则可能占用使用比指定 I/O 更少的 I/O 预置的所有 IOPS。例如,预置 5000 IOPS 的系统最多可实现使用 64 KB I/O 的 2500 IOPS 或使用 128 KB I/O 的 1250 IOPS。

    请注意,磁性存储不预置 I/O 容量,因此所有 I/O 大小都视为单个 I/O。通用型存储会基于卷的容量预置 I/O 容量。有关通用型存储吞吐量的更多信息,请转到通用型 (SSD) 卷

  • 由于 Amazon RDS 管理数据库实例,因此我们在实例上预留了开销空间。虽然预留的存储空间量随数据库实例类和其他因素而异,但此预留空间可以是总存储空间的 1% 或 2%。

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

影响存储性能的其他因素

以下与系统相关的所有活动均会消耗 I/O 容量;如果这些活动正在进行中,那么可能会降低数据库实例性能:

  • 创建数据库快照

  • 每夜备份

  • 多可用区对等创建

  • 只读副本的创建

  • 扩展存储

系统资源可能会约束数据库实例的吞吐量,不过形成瓶颈可能有其他原因。如果您发现以下情况,则您的数据库可能存在问题:

  • 未达到通道吞吐量限制

  • 队列深度始终较低

  • CPU 使用率低于 80%

  • 有可用的内存

  • 不存在交换活动

  • 有大量可用磁盘空间

  • 您的应用程序拥有许多线程,所有这些线程提交事务的速度与数据库获取事务的速度一样快,而您显然还有未使用的 I/O 容量

如果系统资源均未达到或接近限值且添加线程不会增加数据库事务速率,那么瓶颈最有可能是数据库中发生争用。最常见的形式为行锁和索引页锁争用,但也有许多其他的可能性。 如果遇到这种情况,那么应该向数据库性能优化专家征求建议。

添加存储和更改存储类型

对于现有 MySQL、MariaDB、PostgreSQL 和 Oracle 数据库实例,在扩展存储时,您可能会看到部分 I/O 的容量有所增加。请注意,因为连接到 Windows Server 环境的条带化存储存在扩展性限制,所以您无法更改 SQL Server 数据库实例的存储容量和存储类型。

您可将数据库实例修改为使用其他存储,并且可转换为其他存储类型。添加存储或转换为其他存储类型需要耗费时间,并且会降低数据库实例的性能,因此您应计划何时进行这些更改。

虽然在添加存储时可以使用数据库实例进行读写,但也会出现性能下降的情况,直至添加过程完成。添加存储可能需要耗费几个小时的时间;此过程的持续时间取决于多种因素,例如数据库负载、存储大小、存储类型以及预配置 IOPS 量 (如果有)。典型的扩展存储时间在 24 小时以内,但某些情况下可能会耗时数日。扩展过程中可使用数据库实例,但可能出现性能下降。在添加存储时,将暂停夜间备份,并且不能执行任何其他 Amazon RDS 操作,包括修改、重启、删除、创建只读副本和创建数据库快照。

磁性存储和通用型 (SSD) 存储之间的存储转换可能会用尽为通用型 (SSD) 存储分配的初始 540 万 I/O 点数 (3000 IOPS X 30 分钟)。在执行这些存储转换时,前面的 82 GB 数据以约 3000 IOPS 转换,剩余的数据以分配的通用型 (SSD) 存储的每 GB 100 IOPS 的基本性能率转换。这可能导致转换时间更长。您可以预置更多的通用型 (SSD) 存储以提高您的基本 I/O 性能率,从而缩短转换时间,但请注意,存储大小在分配后不可缩减。

通用型 (SSD) 存储

通用型 (SSD) 存储提供了适用于中小型数据库工作负载的经济实用的存储。以下是通用型 (SSD) 数据库实例的存储大小范围:

  • MySQL、MariaDB 和 PostgreSQL 数据库实例:5 GB–6 TB

  • SQL Server Enterprise 和 Standard 版本:200 GB–16 TB

  • SQL Server Web 和 Express 版本:20 GB–16 TB

  • Oracle 数据库实例:10 GB–6 TB

通用型 (SSD) 存储类型可以提供几毫秒的延迟,能够突增至 3000 IOPS 并维持一段较长的时间。在最小 100 IOPS (以 33.33 GiB 及以下) 和最大 10000 IOPS (以 3334 GiB 及以上) 之间,基准性能以每 GiB 卷大小 3 IOPS 的速度线性扩展。

为高吞吐量工作负载预置少于 100 GB 的通用型 (SSD) 存储可能会在初始通用型 (SSD) I/O 点数余额用尽后导致较高延迟。

I/O 点数和突增性能

通用型 (SSD) 存储性能受卷大小的约束,它指示卷的基本性能水平和积累 I/O 点数的速度。卷越大,基本性能水平越高,积累 I/O 点数的速度越快。I/O 点数代表您的通用型 (SSD) 存储在需要超过基本性能水平时可用来突增大量 I/O 的可用带宽。您的存储拥有的 I/O 点数越多,它可以超过其基本性能水平的突增时间就越长,在需要更高性能时的表现也更好。

在使用通用型 (SSD) 存储时,您的数据库实例将收到 540 万 I/O 点数的初始 I/O 点数余额,这足以将 3000 IOPS 的突增性能持续 30 分钟。设计初始点数余额的目的是为启动卷提供快速初始启动循环,并为其他应用程序提供良好的引导过程。卷以每 GiB 卷大小 3 IOPS 的基准性能率的速度获得 I/O 点数。例如,一个 100 GiB 的 SSD 卷具有 300 IOPS 的基准性能。

当存储的需求超出了基本性能 I/O 水平时,它将使用点数余额中的 I/O 点数突增到所需的性能水平,最大为 3000 IOPS。大于 1000 GB 的存储的基本性能等于或大于最大突增性能,因此其 I/O 点数余额永远不会耗尽,并且可以无限突增。如果存储在一秒内使用的 I/O 点数少于它所赚取的点数,未使用的 I/O 点数会加到 I/O 点数余额中。使用通用型 (SSD) 存储的数据库实例的最大 I/O 点数余额等于初始点数余额 (540 万 I/O 点数)。

如果存储使用了所有其 I/O 点数余额,则其最大性能将保持在基本性能水平 (即存储赚取点数的速度),直到 I/O 需求降低至基本水平以下并且未使用的点数添加到 I/O 点数余额中。存储越大,基本性能就越高,补充点数余额的速度也越快。

注意

磁性存储和通用型 (SSD) 存储之间的存储转换可能会用尽为通用型 (SSD) 存储分配的初始 540 万 I/O 点数 (3000 IOPS X 30 分钟)。在执行这些存储转换时,前面的 82 GB 数据以约3000 IOPS 转换,剩余的数据以分配的通用型 (SSD) 存储的每 GB 100 IOPS 的基本性能率转换。这可能导致转换时间更长。您可以预置更多的通用型 (SSD) 存储以提高您的基本 I/O 性能率,从而缩短转换时间,但请注意,存储大小在分配后不可缩减。

下表列出了几种存储大小以及存储的相关基本性能 (也就是它积累 I/O 点数的速度) 、在最大 3000 IOPS 时的突增持续时间 (从完整点数余额开始时) 以及存储重新填满空点数余额所需的秒数。

存储大小 (GB) 基本性能 (IOPS) 最大突增持续时间 @ 3000 IOPS (秒数) 填满空点数余额的秒数
1 100 1862 54000
100 300 2000 18000
250 750 2400 7200
500 1500 3600 3600
750 2250 7200 2400
1000 3000 无限 不适用

存储的突增持续时间取决于存储的大小、所需的突增 IOPS 以及突增开始时的点数余额。此关系显示在以下方程式中:

(Credit balance) Burst duration =  ------------------------------------ (Burst IOPS) - 3(Storage size in GB)

如果您发现您的存储性能因空 I/O 点数余额而通常限定于基本水平,则应考虑分配基本性能水平更高的更多通用型 (SSD) 存储。或者,您可以为需要持续 IOPS 性能的工作负载切换到预配置 IOPS 存储。

对于需要稳定状态 I/O 的工作负载,配置低于 100 GB 的通用型 (SSD) 存储可能会在您用尽 I/O 突增点数余额时导致更长的延迟。

用于提高性能的 Amazon RDS 预配置 IOPS 存储

对于任何需要快速且一致的 I/O 性能的生产应用程序,我们推荐预配置 IOPS (每秒输入/输出操作数) 存储。预配置 IOPS 存储是一种存储类型,可提供快速、可预测且一致的吞吐量性能。预置 IOPS 存储针对性能要求一致的联机事务处理 (OLTP) 工作负载进行了优化。预配置 IOPS 可帮助优化性能。

在创建数据库实例时,您可以指定 IOPS 速率和存储空间分配。Amazon RDS 会给数据库实例的生命周期预配置 IOPS 速率和存储,直到您对其进行更改。

注意

您实际达到的 IOPS 数量可能会与您指定的值有所不同,具体情况取决于数据库的工作负载、数据库实例大小和提供给数据库引擎的页面大小以及信道带宽。有关更多信息,请参阅 影响实际 IOPS 速率的要素

下表显示了每个数据库引擎的 IOPS 和存储范围。

预配置 IOPS 的范围 存储的范围 IOPS 与存储 (GB) 比率的范围
MariaDB 1000–30,000 IOPS 100 GB–6 TB 3:1–10:1
Microsoft SQL Server、Enterprise 和 Standard 版本 1000–20,000 IOPS 200 GB–16 TB 1:1–50:1
Microsoft SQL Server,Web 和 Express 版本 1000–20,000 IOPS 100 GB–16 TB 1:1–50:1
MySQL 1000–30,000 IOPS 100 GB–6 TB 3:1–10:1
Oracle 1000–30,000 IOPS 100 GB–6 TB 3:1–10:1
PostgreSQL 1000–30,000 IOPS 100 GB–6 TB 3:1–10:1

务必考虑所请求的 IOPS 速率和分配的存储空间的比率,这取决于您的数据库引擎。例如,对于 Oracle,该比率应在 3:1 和 10:1 之间。您在开始时可以预置具有 1,000 IOPS 和 200 GB 存储的 Oracle 数据库实例 (比率为 5:1)。您随后可以利用 200 GB 的存储向上扩展至 2,000 IOPS (比率为 10: 1)。您可以利用 6 TB (6000 GB) 的存储向上扩展至 30,000 IOPS (比率 5:1) - 针对 Oracle 数据库实例的最大数量。

您可修改现有 Oracle、MySQL 或 MariaDB 数据库实例以使用预置 IOPS 存储。您还可修改预置 IOPS 存储设置。

预配置 IOPS 存储与多可用区、只读副本、快照、VPC 和数据库实例类的结合使用

对于生产 OLTP 使用案例,我们建议您使用多可用区部署提高容错能力和预配置 IOPS 存储,以便实现快速可预测性能。除了多可用区部署之外,预配置 IOPS 存储还可以补充下列功能的不足:

  • 用于网络隔离和增强安全性的 Amazon VPC。

  • 只读副本 – 只读副本上的存储类型与主数据库实例上的存储类型无关。例如,如果主数据库实例使用磁性存储,则可添加使用预配置 IOPS 存储的只读副本,反之亦然。如果将基于磁性存储的只读副本与使用预配置 IOPS 存储的主数据库实例结合使用,则只读副本的性能与主数据库实例和只读副本均使用预配置 IOPS 存储的配置的性能相比,可能会有显著差异。

  • 数据库快照 – 如果所使用的数据库实例使用预配置 IOPS 存储,则可使用数据库快照还原配置相同的数据库实例,无论目标数据库实例使用磁性存储还是预配置 IOPS 存储。如果数据库实例使用磁性存储,则只能使用数据库快照还原使用磁性存储的数据库实例。

  • 您可以将预配置 IOPS 存储与任何数据库实例类结合使用。但是,较小的数据库实例类不会一直充分利用预配置 IOPS 存储。为获得最佳性能,建议您使用针对预配置 IOPS 存储优化过的数据库实例类型之一。

预配置 IOPS 存储成本

因为预配置 IOPS 存储会预订供您使用的资源,因此在规定月份中无论是否使用这些资源,您都需为此支付费用。如果使用预配置 IOPS 存储,则无需支付每月的 Amazon RDS I/O 费用。如果只想为所使用的 I/O 付费,则使用磁性存储的数据库实例可能是更好的选择。

充分利用 Amazon RDS 预置 IOPS

使用预配置 IOPS 存储将增加系统能够同时处理的 I/O 请求数。并发度提高可降低延迟,因为 I/O 请求在队列中占用的时间变少。降低延迟可加快数据库提交,从而缩短响应时间并提高数据库吞吐量。

例如,设想一个预置了 10000 预配置 IOPS 的大负荷 OLTP 数据库,它在运行时,通道的读取吞吐量始终限制在 105 Mbps。 工作负载没有实现完美均衡,因此,会有一些闲置的写入信道带宽。 该实例将消耗不到 10000 的 IOPS,但仍将享受容量提升到 20000 预配置 IOPS 的好处。

将预配置 IOPS 容量从 10000 提高到 20000 将使系统的并发 I/O 容量倍增。并发度提高意味着延迟降低,从而可更快地完成事务,因此提高了数据库事务速率。读写延迟的提高程度会有不同,系统会根据哪个资源首先受到限制而进入一个新的均衡。

在这些条件下,即使数据库事务速率可以非常高,预配置 IOPS 消耗实际上可能会出现降低。例如,写入请求的下降会伴随着写入吞吐量的上升。 这充分表明您的数据库更充分地使用了组提交。  写入吞吐量提高而写入 IOPS 保持不变意味着日志写入增加了,但仍然不到 256 KB。写入吞吐量提高而写入 I/O 变少,表示写入的日志已增大,并且平均大小已大于 32 KB,因为这些 I/O 请求占用预配置 IOPS 容量的多个 I/O。

AWS CLI 和 Amazon RDS API 中的预配置 IOPS 存储支持

AWS CLI 通过下列命令支持预配置 IOPS 存储:

Amazon RDS API 支持下列操作中的预配置 IOPS 存储:

影响实际 IOPS 速率的要素

实际达到的 IOPS 速率可能会与您预置的值有所不同,具体情况取决于页面大小、网络带宽,其中一部分是由您的数据库引擎决定的。它还会受到数据库实例大小和数据库工作负载的影响。

页面大小和信道带宽

IOPS 速率的最大理论值还会因为数据库 I/O 页面大小和可用信道带宽的变化而变化。MySQL 和 MariaDB 使用 16 KB 的页面大小,而 Oracle、PostgreSQL (默认) 和 SQL Server 使用 8 KB。在具有 1000 兆位每秒 (Mbps) 的全双工 I/O 通道带宽的数据库实例上,页面 I/O 的最大 IOPS 约为双向 (输入/输出通道) 总量 8000 IOPS (对于 16 KB I/O) 和双向总量 16000 IOPS (对于 8 KB I/O)。

如果其中一个信道上的流量达到容量上限,那么将无法重新分配另一个信道上的可用 IOPS。因此,可达到的 IOPS 速率低于预置 IOPS 速率。

每个页面的读取或写入操作构成一个 I/O 操作。对于读取或者写入多个页面的数据库操作,其中每个数据库操作都会使用多个 I/O 操作。就 PIOPS 容量占用而言,将大于 32 KB 的 I/O 请求视为多个 I/O。一个 40 KB 的 I/O 请求将占用 1.25 个 I/O,一个 48 KB 的请求将占用 1.5 个 I/O,一个 64 KB 的请求将占用 2 个 I/O,以此类推。不将 I/O 请求拆分为多个单独的 I/O;而是将所有 I/O 请求原封不动地提交到存储设备。例如,如果数据库提交一个 128 KB 的 I/O 请求,则该请求作为一个 128 KB 的 I/O 请求进入存储设备,但它将占用与 4 个 32 KB 的 I/O 请求等量的 PIOPS 容量。

预配置 IOPS 的数据库实例类

如果您使用的是预配置 IOPS 存储,建议您使用 M4、M3、R3 和 M2 数据库实例类。这些实例类针对预配置 IOPS 存储进行了优化;而其他实例类未经优化。

针对预配置 IOPS 进行优化的数据库实例类 专用 EBS 吞吐量 (Mbps) 最大 16k IOPS 速率** 最大带宽 (MB/s)**
db.m1.large 500 Mbps 4000 62.5
db.m1.xlarge 1000 Mbps 8000 125
db.m2.2xlarge 500 Mbps 4000 62.5
db.m2.4xlarge 1000 Mbps 8000 125
db.m3.xlarge 500 Mbps 4000 62.5
db.m3.2xlarge 1000 Mbps 8000 125
db.r3.xlarge 500 Mbps 4000 62.5
db.r3.2xlarge 1000 Mbps 8000 125
db.r3.4xlarge 2000 Mbps 16000 250
db.r3.8xlarge * * *
db.m4.large 450 Mbps 3600 56.25
db.m4.xlarge 750 Mbps 6000 93.75
db.m4.2xlarge 1000 Mbps 8000 125
db.m4.4xlarge 2000 Mbps 16000 250
db.m4.10xlarge 4000 Mbps 32000 500

* r3.8xlarge 数据库实例类具有一个不提供 Amazon EBS 优化的 10 GB 网络接口。因此,专用 EBS 带宽在 r3.8xlarge 数据库实例类中不可用。不过,如果您的应用程序不推送与 EBS 竞争的其他网络流量,则可以使用 EBS 流量的所有带宽。

** 此值是基于 100% 只读工作负载的舍入近似值,作为基线配置帮助提供。EBS 优化连接是全双工连接,可以在同时使用两个通信通道的 50/50 读/写工作负载中驱动更多吞吐量和 IOPS。在某些情况下,网络、文件系统和 EBS 加密的开销可能会降低可用的最大吞吐量和 IOPS。

数据库工作负载

系统活动 (如自动备份、数据库快照或扩展存储操作) 可能会消耗一些 I/O,这将减少常规数据库操作的总体可用容量。如果您的数据库设计导致并发问题、锁定或其他形式的数据库争用,您将不能直接使用所有的预置的带宽。

如果预配置 IOPS 容量能够满足高峰工作负载需求,则非高峰期内,应用程序平均消耗的 IOPS 可能少于预置。

为了帮助您验证是否最充分地使用了预置 IOPS 存储,我们添加了一个称为磁盘队列深度的新 CloudWatch 指标。如果您的应用程序是按预置的每 1000 IOPS 大约 5 个待用 I/O 操作的平均队列深度维护的,那么,可以假定消耗的容量正好就是您预置的。例如,如果您预置 10000 IOPS,那么,为了使用这个预置的容量,您最少应该具有 50 个待用的 I/O 操作。