为什么我的 Amazon RDS 数据库实例的可用存储空间很低,或者为什么我的数据库实例在开启存储自动扩缩后处于存储已满的状态?

2 分钟阅读
0

我为 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 数据库实例的只读副本

  1. 创建 RDS 数据库实例的只读副本
  2. 手动增加只读副本的存储容量。默认情况下,Amazon RDS 存储自动扩缩在只读副本上处于停用状态。
  3. 将您的活动 RDS 数据库实例重命名为其他名称。这会阻止所有传入流量。
  4. 将只读副本重命名为您的活动 RDS 数据库实例以前使用的名称。此操作会将只读副本端点更改为与活动的 RDS 数据库实例相同,您不必重新配置您的应用程序。
  5. 提升只读副本

**注意:**对于应用程序或客户端,数据库将在步骤 3–5 期间发生停机。

选项 2:手动拍摄数据库快照并将您的 RDS 数据库实例恢复到某个时间点

  1. 重命名您的活动 RDS 数据库实例,以停止所有传入流量。此操作可防止 RDS 数据库实例达到存储已满状态。如果 RDS 数据库实例处于存储已满状态,您无法继续下一步手动拍摄快照。
  2. 拍摄 RDS 数据库实例的数据库快照。拍摄新快照可防止恢复的 RDS 数据库实例受到存储优化存储修改事件的影响。
  3. 通过选择最近的可恢复时间将您的 RDS 数据库实例恢复到某个时间点。然后,对于实例标识符,输入您的活动 RDS 数据库实例使用的名称。
    注意:为避免进一步增加自动扩缩导致存储优化,暂时不要激活自动扩缩。
  4. 或者,选择修改已恢复的 RDS 数据库实例,以包括任何自定义安全组。默认的数据库安全组将应用至新的 RDS 数据库实例。如果您使用任何自定义安全组,请立即设置它们。
  5. 手动增加新的 RDS 数据库实例的存储容量

**注意:**对于应用程序或客户端,数据库将在步骤 1–4 期间发生停机。

选项 3:自动扩缩已开启,但由于 FreeStorageSpace 不足,您不希望它被激活

关闭自动扩缩会使其无法自动分配额外的存储空间。此功能允许手动为实例分配存储空间。当您想要手动控制存储空间分配时,可以关闭自动扩缩。例如,自动扩缩将增加 10% 的存储空间,但您预计在下一次自动扩缩活动启动之前,会增加 10% 以上的存储空间。

  1. 打开 Amazon RDS 控制台
  2. 选择 Modify(修改)。
  3. Storage Autoscaling(存储自动扩缩)中,取消选中 Enable storage autoscaling(启用存储自动扩缩)。
  4. 选择 Continue(继续)。
  5. 接下来,选择 Apply immediately(立即应用)或 Apply during the next scheduled maintenance window(在下一个计划的维护时段内应用)。
  6. 选择 Modify DB Instance(修改数据库实例)。

注意:FreeStorageSpace 指标在至少五分钟内低于 10% 时,将启动自动扩缩。自实例上次的存储修改以来至少六小时,或实例的存储优化已完成,以较长者为准。


相关信息

使用 Amazon RDS 数据库实例的存储

如何确定导致 Amazon RDS for PostgreSQL 上出现“设备上没有剩余空间”或“磁盘已满”错误的原因?

如何解决 Amazon RDS Oracle 数据库实例使用的存储超出预期的问题?

如何解决 Amazon RDS MySQL 数据库实例使用的存储超出预期的问题?

如何排查运行 SQL Server 的 Amazon RDS 数据库实例的存储消耗问题?

AWS 官方
AWS 官方已更新 1 年前