Amazon RDS 数据库实例存储
Amazon RDS for MySQL、MariaDB、PostgreSQL、Oracle 和 Microsoft SQL Server 的数据库实例使用 Amazon Elastic Block Store (Amazon EBS) 卷进行数据库和日志存储。根据所请求的存储量,Amazon RDS 自动将多个 Amazon EBS 卷分成条状以增强 性能。
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 存储
通用型 SSD 存储提供了经济高效的存储,可用于大多数对延迟不敏感的数据库工作负载。以下是通用型 SSD 数据库实例的存储大小范围:
-
MariaDB、MySQL、Oracle 和 PostgreSQL 数据库实例:20 GiB–64 TiB
-
SQL Server Enterprise、Standard、Web 和 Express 版本:20 GiB–16 TiB
与使用预置 IOPS 存储的实例相比,使用通用型 SSD 存储的数据库实例在创建只读副本、多可用区转换和数据库快照恢复之后会经历更久的延迟。如果您需要数据库实例在执行这些操作之后保持最低延迟,建议您使用预置 IOPS SSD 存储。
Amazon RDS 提供两种类型的通用型 SSD 存储:gp2 存储和 gp3 存储。
gp2 存储
当您的应用程序不需要高存储性能时,您可以使用通用型 SSD gp2 存储。gp2 存储的基准输入/输出性能为 3IOPS/GiB,最少具有 100IOPS。这种关系意味着较大的卷具有更好的性能。例如,100 GiB 卷的基准性能为 300 IOPS。1 TiB 卷的基准性能为 3000 IOPS。gp2 卷(5.34 TiB 及更高)的最高基准性能为 16000 IOPS。
大小低于 1TiB 的卷也有能力在较长的时间内突增至 3000IOPS。实例 I/O 积分余额决定突增性能。有关实例输入/输出积分的更多信息,请参阅《Amazon EC2 用户指南》中的输入/输出积分和突增性能。有关基准性能和输入/输出积分余额如何影响性能的更详细说明,请参阅 Amazon 数据库博客上的博文 Understanding burst vs. baseline performance with Amazon RDS and gp2
许多工作负载从不会耗尽突增余额。不过,某些工作负载可能会用完 3000 IOPS 突增存储积分余额,因此,应计划存储容量以满足您的工作负载需求。
对于大于 1 TiB 的 gp2 卷,基准性能大于突增性能。对于这些卷,因为基准性能优于 3000 IOPS 突发性能,所以突发性能通常并不重要。但是,对于大于 1TiB 的数据库实例,其中存储跨四个 Amazon EBS 卷进行条带化,可以看到高达 12000 IOPS 的突发性能。这适用于除 Microsoft SQL Server(不支持卷条带化)之外的 RDS 数据库引擎。
gp3 存储
通过使用通用型 SSD gp3 存储卷,您可以独立于存储容量自定义存储性能。存储性能是每秒输入/输出操作数(IOPS)与存储卷可执行读取和写入的速度(存储吞吐量)的组合。在 gp3 存储卷上,Amazon RDS 提供的基准存储性能为 3000IOPS 和 125MiBps。
对于除 RDS For SQL Server 之外的每个 RDS 数据库引擎,当 gp3 卷的存储大小达到某个阈值时,基准存储性能将提高到 12000IOPS 和 500MiBps。这是因为卷条带化,其中存储使用四个逻辑卷而不是一个。RDS for SQL Server 不支持卷条带化,因此没有阈值。
单可用区和多可用区数据库实例支持通用型 SSD gp3 存储,但多可用区数据库集群不支持。有关更多信息,请参阅 多可用区部署,可实现高可用性 和 多可用区数据库集群部署:
下表显示了 Amazon RDS 数据库引擎上 gp3 卷的存储性能,包括阈值。
数据库引擎 | 存储大小 | 基准存储性能 | 预配置的 IOPS 的范围 | 预调配的存储吞吐量范围 |
---|---|---|---|---|
MariaDB、MySQL 和 PostgreSQL | 小于 400GiB | 3,000IOPS/125MiBPS | 不适用 | 不适用 |
MariaDB、MySQL 和 PostgreSQL | 400GiB 及更高 | 12,000IOPS/500MiBPS | 12,000–64,000IOPS | 500–4,000MiBps |
Oracle | 小于 200GiB | 3,000IOPS/125MiBPS | 不适用 | 不适用 |
Oracle | 200GiB 及更高 | 12,000IOPS/500MiBPS | 12,000–64,000IOPS | 500–4,000MiBps |
SQL Server | 20 GiB–16 TiB | 3,000IOPS/125MiBPS | 3,000–16,000IOPS | 125–1,000MiBps |
对于除 RDS for SQL Server 之外的每个数据库引擎,当存储大小等于或高于阈值时,您可以预调配额外的 IOPS 和存储吞吐量。对于 RDS for SQL Server,您可以为任何可用存储大小预调配额外的 IOPS 和存储吞吐量。对于所有数据库引擎,您只需为额外的预调配存储性能付费。有关更多信息,请参阅 Amazon RDS 定价
尽管增加的预调配 IOPS 和存储吞吐量不依赖于存储大小,但它们是相互关联的。当您将 MariaDB 和 MySQL 的 IOPS 提高到 32,000 以上时,存储吞吐量值会自动从 500MiBps 增加。例如,当您在 RDS for MySQL 上将 IOPS 设置为 40,000 时,存储吞吐量必须至少为 625MiBps。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 存储
对于需要快速且一致的输入/输出性能的生产应用程序,我们推荐预调配 IOPS(每秒输入/输出操作数)存储。预配置 IOPS 存储是一种存储类型,它提供了可预测的性能以及一致的低延迟。预配置的 IOPS 存储针对性能要求一致的联机事务处理 (OLTP) 工作负载进行了优化。预配置 IOPS 可帮助这些工作负载的性能优化。
在某些情况下,您的数据库工作负载可能无法 100% 实现您预调配的 IOPS。有关更多信息,请参阅影响存储性能的因素。
在创建数据库实例时,您可以指定 IOPS 速率和卷的大小。Amazon RDS 为数据库实例提供该 IOPS 速率,直到您对其进行更改。
io1 存储
对于 I/O 密集型工作负载,您可以使用预调配 IOPS SSD io1 存储,并实现高达 256,000 次每秒 I/O 操作(IOPS)。下表显示每个数据库引擎的预调配 IOPS 和存储大小的范围。
数据库引擎 | 预配置的 IOPS 的范围 | 存储大小的范围 |
---|---|---|
MariaDB | 1000–256000 IOPS | 100 GiB–64 TiB |
SQL Server | 1000–64000 IOPS | 20 GiB–16 TiB |
MySQL | 1000–256000 IOPS | 100 GiB–64 TiB |
Oracle | 1000–256000 IOPS | 100 GiB–64 TiB |
PostgreSQL | 1000–256000 IOPS | 100 GiB–64 TiB |
对于 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 的额外吞吐量 | 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 |
有关支持的所有实例类的更多详情,请参阅上一代数据库实例