我想要为 Amazon DynamoDB 表创建全局二级索引(GSI),但用了很长时间。
简短描述
当您向现有表中添加新的全局二级索引时,IndexStatus 将被设置为 CREATING,并且 Backfilling 将被设置为 true。回填从表中读取项目并确定是否可以将它们添加到索引中。回填索引时,DynamoDB 使用内部系统容量从表中读取项目。这样可以最大限度地减少索引创建带来的影响,并确保表不会耗尽读取容量。
构建全局二级索引所需的时间取决于多个因素:
- 基表的大小
- 表中有资格包含在索引中的项目的数量
- 计划放入索引中的属性的数量
- 索引的预置写入容量
- 索引创建过程中对基表执行的写入活动
- 跨索引分区的数据分配
要加速创建过程,请增加索引的写入容量单位(WCU)数量。
全局二级索引继承基表的读取或写入容量模式。如果您的表处于按需模式,则 DynamoDB 也会在按需模式下创建索引。在这种情况下,您无法增加索引的容量,因为按需 DynamoDB 表会根据传入流量自行扩展。
解决方案
使用 OnlineIndexPercentageProgress Amazon CloudWatch 指标来监控索引创建进度:
1. 打开 DynamoDB 控制台。
2. 在导航窗格中,选择表,然后从列表中选择表。
3. 选择指标选项卡。
4. 选择查看所有 CloudWatch 指标。
5. 在搜索框中,输入 OnlineIndexPercentageProgress。
**注意:**如果搜索未返回任何结果,请等待一分钟左右以便指标完成填充。然后重试。
6. 选择索引名称查看进度。
确定您需要的其他 WCU 数量。为此,请将以千字节为单位的表大小除以所需的回填时间。参见以下计算示例。
示例 1
假设您有一个 1GiB(1074000KB)的表。您希望回填过程在 10 分钟(600 秒)内完成。因此,按如下方式计算 WCU 的数量:
1074000 / 600 = 1790 个 WCU
示例 2
假设您希望索引大小为 2GB,并希望在一小时内完成索引创建。因此,按如下方式计算 WCU 的数量:
(2GB * 1024 * 1024)KB/60 分钟/60 秒 = 约 583 个 WCU
所需的 WCU 数量取决于索引大小和您估计的时间。
**注意:**这只是一个估算值。创建时间取决于多个因素,例如您的键分布、项目的大小以及投影到索引中的属性数量。
要预置额外的写入容量,请执行以下操作:
1. 打开 DynamoDB 控制台。
2. 在导航窗格中,选择表,然后从列表中选择表。
3. 选择容量选项卡。
4. 增加索引的写入容量,然后选择保存。
5. 大约一分钟后,检查 OnlineIndexPercentageProgress 指标,以查看创建速度是否得到了提高。
**注意:**您无需预置额外的读取容量。
相关信息
使用二级索引改进数据访问
向现有表添加全局二级索引
管理全局二级索引