识别未使用的资源 - Amazon DynamoDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

识别未使用的资源

本部分概述如何定期评估未使用资源。随着应用程序需求的演变,您应确保没有未使用的资源,并且不会导致不必要的 Amazon DynamoDB 成本。下述程序将使用 Amazon CloudWatch 指标来识别未使用的资源,并将帮助您识别这些资源并对其采取措施以降低成本。

您可以使用监控 DynamoDB,它会收集 CloudWatch来自 DynamoDB 的原始数据并将其处理为可读的、近乎实时的指标。这些统计数据会保留一段时间,这样您便可以访问历史信息,更好地了解使用情况。默认情况下,DynamoDB 指标数据会自动发送到。 CloudWatch 有关更多信息,请参阅什么是亚马逊 CloudWatch? 以及《亚马逊 CloudWatch 用户指南》中的指标保留率

如何确定未使用的资源

为了识别未使用的表或索引,我们将在 30 天内查看以下 CloudWatch 指标,以了解表上是否存在任何活跃的读取或写入或对全局二级索引 (GSI) 的读取:

ConsumedReadCapacityUnits

在指定时间段内使用的读取容量单位数,这样便可以跟踪您在已占用容量中使用的容量。可以检索表及其所有全局二级索引或特定全局二级索引占用的总读取容量。

ConsumedWriteCapacityUnits

在指定时间段内使用的写入容量单位数,这样便可以跟踪您在已占用容量中使用的容量。可以检索表及其所有全局二级索引或特定全局二级索引占用的总写入容量。

确定未使用的表资源

Amazon CloudWatch 是一项监控和可观察性服务,它提供用于识别未使用资源的 DynamoDB 表指标。 CloudWatch 可以通过,Amazon Web Services Management Console也可以通过查看指标Amazon Command Line Interface。

Amazon Command Line Interface

要通过 Amazon Command Line Interface 查看表中的指标,可以使用以下命令。

  1. 首先,评估您的表的读取数:

    aws cloudwatch get-metric-statistics --metric-name ConsumedReadCapacityUnits --start-time <start-time> --end-time <end- time> --period <period> --namespace AWS/DynamoDB --statistics Sum -- dimensions Name=TableName,Value=<table-name>

    为了避免错误地将表标识为未使用,请评估较长时段内的指标。选择合适的开始时间和结束时间范围(如 30 天)以及合适的时间段(如 86400)。

    在返回的数据中,任何大于 0Sum(合计)都表示您所评估的表在该时间段内收到了读取流量。

    以下结果显示表在评估时段内收到了读取流量:

    { "Timestamp": "2022-08-25T19:40:00Z", "Sum": 36023355.0, "Unit": "Count" }, { "Timestamp": "2022-08-12T19:40:00Z", "Sum": 38025777.5, "Unit": "Count" },

    以下结果显示表在评估时段内未收到读取流量:

    { "Timestamp": "2022-08-01T19:50:00Z", "Sum": 0.0, "Unit": "Count" }, { "Timestamp": "2022-08-20T19:50:00Z", "Sum": 0.0, "Unit": "Count" },
  2. 接下来,评估表的写入数量:

    aws cloudwatch get-metric-statistics --metric-name ConsumedWriteCapacityUnits --start-time <start-time> --end-time <end- time> --period <period> --namespace AWS/DynamoDB --statistics Sum -- dimensions Name=TableName,Value=<table-name>

    为了避免错误地将表标识为未使用,您需要评估较长时段内的指标。选择合适的开始时间和结束时间范围(例如 30 天)以及合适的时间段,例如 86400

    在返回的数据中,任何大于 0Sum(合计)都表示您所评估的表在该时间段内收到了读取流量。

    以下结果显示表在评估时段内收到了写入流量:

    { "Timestamp": "2022-08-19T20:15:00Z", "Sum": 41014457.0, "Unit": "Count" }, { "Timestamp": "2022-08-18T20:15:00Z", "Sum": 40048531.0, "Unit": "Count" },

    以下结果显示表在评估时段内未收到写入流量:

    { "Timestamp": "2022-07-31T20:15:00Z", "Sum": 0.0, "Unit": "Count" }, { "Timestamp": "2022-08-19T20:15:00Z", "Sum": 0.0, "Unit": "Count" },
Amazon Web Services Management Console

利用以下步骤,您可以通过 Amazon Web Services Management Console 评估资源利用率。

  1. 登录Amazon控制台并导航到 CloudWatch 服务页面,网址为 https://console.aws.amazon.com/cloudwatch/。如有必要,请在控制台右上角选择相应的 Amazon 区域。

  2. 在左侧导航栏中,找到 Metrics(指标)部分,然后选择 All metrics(全部指标)。

  3. 以上操作将打开一个控制面板,其中包含两个面板。在顶部面板中,您将看到以图表表示的当前指标。在底部,您可选择用于绘制图表的指标。在底部面板中选择 DynamoDB。

  4. 在 DynamoDB 指标选择面板中,选择 Table Metrics(表指标)类别以显示当前区域中表的指标。

  5. 向下滚动菜单来标识您的表名,然后选择表的指标 ConsumedReadCapacityUnitsConsumedWriteCapacityUnits

  6. 选择 Graphed metrics (2)(绘成图表的指标 (2))选项卡,然后将 Statistic(统计信息)列调整为 Sum(总计)。

    
                  图中显示 Amazon Web Services Management Console 的 Graphed metrics(绘成图表的指标)选项卡。
  7. 为了避免错误地将表标识为未使用,您需要评估较长时段内的指标。在图形面板顶部选择相应的时间范围来评估表,例如 1 个月。选择 Custom(自定义),然后在下拉菜单中选择 1 Months(1 个月)并选择 Apply(应用)。

    
                  图像显示 Amazon Web Services Management Console 中一个月的时间范围。
  8. 评估您的表的绘成图表的指标,以确定是否使用了该表。大于 0 的指标表示在评估时间段内使用了表。读取和写入均为 0 的空白图指示未使用表。

    下图显示了具有读取流量的表:

    
                  图像显示 Amazon Web Services Management Console 中具有读取流量的表。

    下图显示了没有读取流量的表:

    
                  图像显示 Amazon Web Services Management Console 中没有读取流量的表。

清理未使用的表资源

如果您已确定未使用的表资源,则可以通过以下方式降低其持续成本。

注意

如果您已确定未使用的表,但仍希望将其保持可用状态,以防将来需要访问该表,请考虑将其切换到按需模式。否则,您可以考虑备份并彻底删除该表。

容量模式

DynamoDB 对 DynamoDB 表收取读取、写入和存储数据费用。

DynamoDB 具有按需和预置这两种容量模式,它们对表上处理的读取和写入采用特定的计费选项。读/写容量模式控制对读写吞吐量收费的方式以及管理容量的方式。

对于按需模式表,您无需指定预期应用程序执行的读取和写入吞吐量。DynamoDB 按照读取请求单位和写入请求单位对应用程序在表上执行的读取和写入操作收费。如果表/索引上没有活动,则您无需为吞吐量付费,但仍会产生存储费用。

表类

DynamoDB 还提供了两个表类,旨在帮助您优化成本。“DynamoDB 标准”表类是原定设置,建议用于大多数工作负载。“DynamoDB 标准-不经常访问 (DynamoDB Standard-IA)”表类别针对存储占据主要成本的表进行优化。

如果您的表或索引上没有活动,则主要成本可能是存储成本,更改表类将节省大量费用。

删除表

如果您发现了一个未使用的表并想将其删除,则可能需要先备份或导出数据。

通过 Amazon Backup 执行的备份可以利用冷存储分层,从而进一步降低成本。有关如何启用通过 将 Amazon Backup 与 DynamoDB 结合使用 Backup 进行备份的信息,请参阅 Amazon 文档;有关如何使用生命周期将备份转移到冷存储的信息,请参阅管理备份计划文档。

或者,您可以选择将表的数据导出到 S3。为此,请参阅导出至 Amazon S3 文档。导出数据后,如果您希望利用 S3 Glacier Instant Retrieval、S3 Glacier Flexile Retrieval 或 S3 Glacier Deep Archive 进一步降低成本,请参阅管理存储生命周期

备份表后,您可以选择通过 Amazon Web Services Management Console 或通过 Amazon Command Line Interface 将其删除。

确定未使用的 GSI 资源

确定未使用的全局二级索引的步骤与确定未使用的表的步骤类似。在写入基表的项目中包含用作 GSI 分区键的属性时,由于 DynamoDB 会将此类项目复制到 GSI,如果基表在使用,则未使用的 GSI 仍有可能具有大于 0 的 ConsumedWriteCapacityUnits。因此,您将仅评估 ConsumedReadCapacityUnits 指标来确定 GSI 是否未使用。

要通过 Amazon Amazon CLI 查看 GSI 指标,您可以使用以下命令评估表的读取数:

aws cloudwatch get-metric-statistics --metric-name ConsumedReadCapacityUnits --start-time <start-time> --end-time <end- time> --period <period> --namespace AWS/DynamoDB --statistics Sum -- dimensions Name=TableName,Value=<table-name> Name=GlobalSecondaryIndexName,Value=<index-name>

为了避免错误地将表标识为未使用,您需要评估较长时段内的指标。选择合适的开始时间和结束时间范围(例如 30 天)以及合适的时间段,例如 86400。

在返回的数据中,任何大于 0 的 Sum(合计)都表示您所评估的表在该时间段内收到了读取流量。

以下结果显示 GSI 在评估时段内收到了读取流量:

{ "Timestamp": "2022-08-17T21:20:00Z", "Sum": 36319167.0, "Unit": "Count" }, { "Timestamp": "2022-08-11T21:20:00Z", "Sum": 1869136.0, "Unit": "Count" },

以下结果显示 GSI 在评估时段内收到了极少的读取流量:

{ "Timestamp": "2022-08-28T21:20:00Z", "Sum": 0.0, "Unit": "Count" }, { "Timestamp": "2022-08-15T21:20:00Z", "Sum": 2.0, "Unit": "Count" },

以下结果显示 GSI 在评估时段内未收到读取流量:

{ "Timestamp": "2022-08-17T21:20:00Z", "Sum": 0.0, "Unit": "Count" }, { "Timestamp": "2022-08-11T21:20:00Z", "Sum": 0.0, "Unit": "Count" },

清理未使用的 GSI 资源

如果您已确定未使用的 GSI,则可以选择将其删除。由于 GSI 中存在的所有数据也存在于基表中,因此在删除 GSI 之前无需进行额外备份。如果以后会再次需要 GSI,则可以将其重新添加到表中。

如果您发现了不常使用的 GSI,则应考虑更改应用程序中的设计,以便将其删除或减少其成本。例如,虽然 DynamoDB 扫描会消耗大量系统资源而应谨慎使用,但如果很少使用其支持的访问模式,则它们可能比 GSI 更具成本效益。

此外,如果需要 GSI 来支持不频繁的访问模式,可以考虑规划一组更有限的属性。尽管后续可能需要对基表进行查询以支持不频繁的访问模式,但它有可能显著降低存储和写入成本。

清理未使用的全局表

Amazon DynamoDB 全局表 为部署多区域、多活跃数据库提供了完全托管式解决方案,而不必构建和维护您自己的复制解决方案。

全局表非常适合在靠近用户的位置提供对数据的低延迟访问,也可以用作灾难恢复的辅助区域。

如果为某个资源启用了全局表选项,以提供对数据的低延迟访问,但该选项不是灾难恢复策略的一部分,请通过评估两个副本的指标来验证两个副本是否都在积极提供读取流量。 CloudWatch 如果一个副本没有处理读取流量,则它可能是未使用的资源。

如果全局表包括在灾难恢复策略中,则在主动/备用模式下,预计会有一个副本不会收到读取流量。

清理未使用的备份或 point-in-time 恢复 (PITR)

DynamoDB 提供两种备份方式。P oint-in-time recovery 提供 35 天的连续备份,以帮助您防止意外写入或删除,而按需备份则允许创建可以长期保存的快照。这两种类型的备份都有相关的成本。

请参阅 使用 DynamoDB 的按需备份和还原DynamoDB 的时间点恢复 文档,以确定您的表是否启用了可能不再需要的备份。