我为我的 Amazon Relational Database Service (Amazon RDS) 数据库实例启用了存储自动扩缩,但可用存储空间不到 10%。或者,该实例处于存储空间已满状态。
简短描述
当您更改数据库实例的存储空间时,该数据库实例将进入 storage-optimization 状态。Storage-optimization 通常需要几分钟才能完成,但可能需要 24 小时以上。要监控该过程,请使用 Amazon Elastic Compute Cloud (Amazon EC2) 控制台。
**注意:**从上次修改存储空间起的六小时内,或者直到 storage-optimization 完成之前(以较长者为准),您都无法进行额外的存储空间修改。
在 storage-optimization 期间,即使可用存储空间不足 10%,自动扩缩也无法增加数据库实例的存储空间。
当您使用自动扩缩增加数据库实例的存储空间时,额外的存储空间将按以下增量之一增加,以较大者为准:
- 10 GiB
- 当前分配空间的 10%
- 根据过去一小时的 FreeStorageSpace 指标对七小时的存储增长进行预测
如果要在不到一小时的时间内加载 50 GB 的数据,增加 10% 的存储空间是不够的。由于先前的自动扩缩操作处于 storage-optimization 状态,因此在该过程完成之前,您无法对数据库实例进行存储修改。因此,您的数据库实例可能处于 storage-full 状态长达几个小时。
解决方法
如果您无法修改 RDS 数据库实例存储,请检查您的实例的状态。如果您的数据库实例处于 storage-full 或 available 状态,请检查最近六小时内是否发生了存储空间修改。要确认最近是否执行了存储空间增加操作,请检查数据库实例的事件中是否显示以下消息:
“已完成对分配存储空间的修改。”
-或-
“已完成对分配存储空间应用自动扩缩启动的修改。”
如果您的数据库实例处于 storage-optimization 状态,则将数据库恢复到具有更多 Amazon Elastic Block Store (Amazon EBS) 存储空间的数据库实例。
**注意:**如果您的数据库实例处于 storage-full 状态,则必须先停止向该数据库实例加载任何数据。此过程可能需要几分钟到几小时才能使实例处于 storage-full 状态。
当您的数据库实例未处于 storage-full 状态时,使用以下选项之一修改数据库实例的存储大小:
- 选项 1: 创建和提升数据库实例的只读副本。
- 选项 2: 手动创建数据库快照并将数据库实例恢复到指定时间点。
- 选项 3: 由于您的 FreeStorageSpace 不足,请关闭自动扩缩。
**注意:**选项 1 和 2 会导致数据库停机。但是,选项 1 的停机时间比选项 2 少。MariaDB、Microsoft SQL Server、MySQL、Oracle 和 PostgreSQL 数据库引擎支持只读副本。
创建和提升 RDS 数据库实例的只读副本
完成以下步骤:
- 创建数据库实例的只读副本。
- 增加只读副本的存储容量。默认情况下,只读副本上的 Amazon RDS 存储自动扩缩处于停用状态。
- 将您的活动数据库实例重命名为其他名称。这会阻止传入流量。
- 将只读副本重命名为您用于活动数据库实例的名称。这会将只读副本端点更改为与活动数据库实例相同,并且您无需重新配置应用程序。
- 提升只读副本。
**注意:**对于应用程序或客户端,数据库停机发生在步骤 3-5 中。
手动创建数据库快照并将您的 RDS 数据库实例恢复到指定时间点
完成以下步骤:
- 重命名活动数据库实例以阻止传入流量并防止 storage-full 状态。如果您的数据库实例处于 storage-full 状态,则无法继续下一步。
- 创建数据库实例的数据库快照。
**注意:**快照可防止恢复的数据库实例发生 storage-optimization 存储修改事件。
- 要将数据库实例恢复到某个时间点,请选择最新的可恢复时间。对于实例标识符,输入您的活动数据库实例使用的名称。
**注意:**为避免自动扩缩增加导致 storage-optimization,请勿激活自动扩缩。
- (可选)修改恢复的数据库实例以包括自定义安全组。默认数据库安全组应用于新数据库实例。
- 增加新数据库实例的存储容量。
**注意:**对于应用程序或客户端,数据库停机发生在步骤 1-4 期间。
由于 FreeStorageSpace 不足,请关闭自动扩缩
如果您关闭自动扩缩,则不会自动分配额外的存储空间,您可以手动控制存储分配。例如,自动扩缩会将存储空间增加 10%,但您希望在自动扩缩事件启动之前增加超过 10% 的存储空间。对于这种情况,请关闭自动扩缩。
要关闭自动扩缩,请完成以下步骤:
- 打开 Amazon RDS 控制台。
- 在导航窗格中,选择 Databases(数据库),然后选择您的数据库。
- 选择 Modify(修改)。
- 在 Storage(存储)的 Additional storage configuration(其他存储配置)下,取消选中 Enable storage autoscaling(启用存储自动扩缩)。
- 选择 Continue(继续)。
- 选择 Apply immediately(立即应用)或 Apply during the next scheduled maintenance window(在下一个计划维护时段内应用)。
- 选择 Modify DB instance(修改数据库实例)。
**注意:**当 FreeStorageSpace 指标在至少五分钟内低于 10% 时,自动扩缩将启动。自上次 storage-modification 起至少六个小时后,或者实例的 storage-optimization 已完成时(以较长者为准),自动扩缩也会启动。
相关信息
为什么我在 Amazon RDS for PostgreSQL 上收到“No space left on device”(设备上没有剩余空间)或“DiskFull”错误?
我的 Amazon RDS for Oracle 数据库实例的存储空间使用量为何超出预期?
我的 Amazon RDS for MySQL 数据库实例的存储使用量为何超出预期?
如何优化我的 Amazon RDS for SQL Server 数据库实例中的存储占用?