DynamoDB テーブルのグローバルセカンダリインデックスの作成を高速化するにはどうすればよいですか?

最終更新日: 2020 年 6 月 24 日

Amazon DynamoDB テーブルのグローバルセカンダリインデックス (GSI) を作成しようとしていますが、時間がかかります。作成プロセスを高速化するにはどうすればよいですか?

簡単な説明

既存のテーブルに新しいグローバルセカンダリインデックスを追加すると、IndexStatus は CREATING に設定され、Backfilling は true に設定されます。バックフィルは、テーブルから項目を読み取り、インデックスに追加できるかどうかを判断するプロセスです。グローバルセカンダリインデックスの構築に必要な時間は、次のような複数の要因によって異なります。

  • ベーステーブルのサイズ
  • インデックスに含めることのできるテーブル内の項目の数
  • インデックスに投影された属性の数
  • インデックスのプロビジョニングされた書き込みキャパシティー
  • インデックス作成時のベーステーブルでの書き込みアクティビティ
  • インデックスパーティション間でのデータ分散

作成プロセスを高速化するには、インデックスの書き込みキャパシティーユニット (WCU) の数を増やします。

解決方法

インデックス作成の進行状況をモニタリングするには、 OnlineIndexPercentageProgress Amazon CloudWatch メトリクスを使用します。

  1. DynamoDB コンソールを開きます。
  2. ナビゲーションペインで、[テーブル] を選択し、リストからテーブルを選択します。
  3. [メトリクス] タブを選択します。
  4. [すべての CloudWatch メトリクスを表示] を選択します。
  5. 検索ボックスに OnlineIndexPercentageProgress と入力します。
    注意: 検索結果が返されない場合は、メトリクスが入力されるまで約 1 分待ちます。その後、もう一度お試しください。
  6. 進行状況を確認するには、インデックスの名前を選択します。

テーブルサイズ (キロバイト単位) を目的のバックフィル時間で割って、追加で必要な WCU の数を決定します。例えば、1 GiB (1,074,000 KB) のテーブルがあるとします。バックフィルのプロセスが 10 分 (600 秒) で完了することを望んでいます。必要な WCU の数は次のとおりです。

1,074,000 / 600 = 1,790 WCU

注意: これは推定値です。作成時間は、パーティション間でキーを分散する方法、項目の大きさ、テーブルからインデックスに投影される属性数などによって異なります。

追加の書き込みキャパシティーをプロビジョニングする方法は次のとおりです。

  1. DynamoDB コンソールを開きます。
  2. ナビゲーションペインで、[テーブル] を選択し、リストからテーブルを選択します。
  3. [キャパシティー] タブを選択します。
  4. インデックスの書き込みキャパシティーを増やし、[保存] をクリックします。
  5. 約 1 分後、OnlineIndexPercentageProgress メトリクスを調べて、作成速度が向上したかどうかを確認します。