我为 Amazon Relational Database Service(Amazon RDS)数据库实例激活了存储自动扩缩,但我看到可用存储空间低于 10% 或者实例处于存储已满的状态。为什么会出现这种情况,我该怎样解决?
简短描述
如果您更改了 RDS 数据库实例的存储,则在六(6)小时内或存储优化过程完成之前,您无法进行进一步修改。存储修改周期通常需要几秒钟才能完成,并在卷过渡到正在优化状态后生效。有时,存储优化可能需要 24 小时以上才能使新配置生效,例如卷尚未完全初始化时。有关存储过程的更多信息,请参阅监控卷修改的进度。
在存储修改存储优化期内,即使可用存储空间不足 10%,自动扩缩也无法增加数据库实例的存储空间。有关更多信息,请参阅增加数据库实例存储容量。
当您使用自动扩缩增加了 RDS 数据库实例的存储空间时,额外存储空间将以以下两者中较大的增量增加:
- 5GB
- 当前分配空间的 10%
- 根据过去一小时的 FreeStorageSpace 指标预测 7 小时的存储空间增长率
但是,如果您希望在一小时内加载 50 GB 数据,增加 10% 的存储空间是不够的。由于之前的自动扩缩操作处于
存储优化期,因此在该过程完成之前,RDS 数据库实例无法进行任何存储修改。这可能会导致 RDS 数据库实例在长达数小时内处于
存储已满状态。
解决方法
如果您无法修改 RDS 数据库实例的存储空间,请检查以下内容以确定您的实例是否受到存储优化期的影响:
- 您的 RDS 数据库实例的状态为存储优化
- 您的 RDS 数据库实例的状态为存储已满或可用,但最近进行了存储修改。要确认最近执行了存储空间增加操作,请检查您的 RDS 数据库实例的事件中是否有以下消息:
“已将修改应用于分配的存储空间”
-或者-
“已将自动扩缩启动的修改应用于分配的存储空间”
如果最近的存储修改激活了存储优化,则可以将数据库恢复到具有更多 Amazon Elastic Block Store(Amazon EBS)存储空间的 RDS 数据库实例。如果 RDS 数据库实例处于存储已满状态,您必须先停止 RDS 数据库实例上的任何数据加载。然后,您可以遵循特定数据库引擎的流程从 RDS 数据库实例中释放存储空间。
注意:此过程可能需要几分钟到几小时不等,之后,实例才会不再处于存储已满状态。
如果 RDS 数据库实例未处于存储已满状态,您可以使用以下选项修改您的数据库实例存储大小:
- **选项 1:**创建并提升 RDS 数据库实例的只读副本
- **选项 2:**手动拍摄数据库快照并将您的 RDS 数据库实例恢复到某个时间点
- **选项 3:**自动扩缩已开启,但由于 FreeStorageSpace 不足,您不希望它被激活
选项 1 和 2 会导致数据库停机。但是,创建和提升只读副本可以减少停机时间。MariaDB、Microsoft SQL Server、MySQL、Oracle 和 PostgreSQL 数据库引擎支持只读副本。
选项 1:创建并提升 RDS 数据库实例的只读副本
- 创建 RDS 数据库实例的只读副本。
- 手动增加只读副本的存储容量。默认情况下,Amazon RDS 存储自动扩缩在只读副本上处于停用状态。
- 将您的活动 RDS 数据库实例重命名为其他名称。这会阻止所有传入流量。
- 将只读副本重命名为您的活动 RDS 数据库实例以前使用的名称。此操作会将只读副本端点更改为与活动的 RDS 数据库实例相同,您不必重新配置您的应用程序。
- 提升只读副本。
**注意:**对于应用程序或客户端,数据库将在步骤 3–5 期间发生停机。
选项 2:手动拍摄数据库快照并将您的 RDS 数据库实例恢复到某个时间点
- 重命名您的活动 RDS 数据库实例,以停止所有传入流量。此操作可防止 RDS 数据库实例达到存储已满状态。如果 RDS 数据库实例处于存储已满状态,您无法继续下一步手动拍摄快照。
- 拍摄 RDS 数据库实例的数据库快照。拍摄新快照可防止恢复的 RDS 数据库实例受到存储优化存储修改事件的影响。
- 通过选择最近的可恢复时间将您的 RDS 数据库实例恢复到某个时间点。然后,对于实例标识符,输入您的活动 RDS 数据库实例使用的名称。
注意:为避免进一步增加自动扩缩导致存储优化,暂时不要激活自动扩缩。
- 或者,选择修改已恢复的 RDS 数据库实例,以包括任何自定义安全组。默认的数据库安全组将应用至新的 RDS 数据库实例。如果您使用任何自定义安全组,请立即设置它们。
- 手动增加新的 RDS 数据库实例的存储容量。
**注意:**对于应用程序或客户端,数据库将在步骤 1–4 期间发生停机。
选项 3:自动扩缩已开启,但由于 FreeStorageSpace 不足,您不希望它被激活
关闭自动扩缩会使其无法自动分配额外的存储空间。此功能允许手动为实例分配存储空间。当您想要手动控制存储空间分配时,可以关闭自动扩缩。例如,自动扩缩将增加 10% 的存储空间,但您预计在下一次自动扩缩活动启动之前,会增加 10% 以上的存储空间。
- 打开 Amazon RDS 控制台。
- 选择 Modify(修改)。
- 在 Storage Autoscaling(存储自动扩缩)中,取消选中 Enable storage autoscaling(启用存储自动扩缩)。
- 选择 Continue(继续)。
- 接下来,选择 Apply immediately(立即应用)或 Apply during the next scheduled maintenance window(在下一个计划的维护时段内应用)。
- 选择 Modify DB Instance(修改数据库实例)。
注意:当 FreeStorageSpace 指标在至少五分钟内低于 10% 时,将启动自动扩缩。自实例上次的存储修改以来至少六小时,或实例的存储优化已完成,以较长者为准。
相关信息
使用 Amazon RDS 数据库实例的存储
如何确定导致 Amazon RDS for PostgreSQL 上出现“设备上没有剩余空间”或“磁盘已满”错误的原因?
如何解决 Amazon RDS Oracle 数据库实例使用的存储超出预期的问题?
如何解决 Amazon RDS MySQL 数据库实例使用的存储超出预期的问题?
如何排查运行 SQL Server 的 Amazon RDS 数据库实例的存储消耗问题?