オンデマンドモードのスロットリングの問題のトラブルシューティング
オンデマンドキャパシティーモードを使用する DynamoDB テーブルは、アプリケーションのトラフィックボリュームに自動的に対応します。ただし、その場合でも、オンデマンドモードを使用するテーブルでスロットリングが発生する可能性があります。このトピックでは、オンデマンドテーブルの一般的なスロットリングの問題をトラブルシューティングする方法について説明します。
トラフィックが前のピークの 2 倍を超えている
トラフィックが 30 分以内に前のトラフィックピークの 2 倍を超えると、スロットリングが発生する可能性があります。前のトラフィックのピークを超える前に、トラフィックの増加を 30 分以上に分散することをお勧めします。テーブルへのトラフィックをモニタリングするには、Amazon CloudWatch の ConsumedReadCapacityUnits
メトリクスを使用します。詳細については、「DynamoDB のメトリクスとディメンション」を参照してください。
新しいテーブルでは、書き込みリクエストユニットを最大 4,000 個、読み込みリクエストユニットを最大 12,000 個、またはこれら 2 つの線形組み合わせを瞬時に処理できます。
オンデマンドキャパシティモードに切り替えた既存のテーブルの場合、前のピークは以下の値のいずれかになります。
-
前にテーブルにプロビジョニングされたスループットの半分
-
オンデマンドキャパシティモードで新しく作成されたテーブルの設定
詳細については、「初期スループットとスケーリングのプロパティ」を参照してください。
トラフィックがパーティションあたりの最大数を超えている
テーブルの各パーティションは、最大 3,000 個の読み取りリクエストユニット、または 1,000 個の書き込みリクエストユニット、あるいは両方の線形組み合わせを処理できます。パーティションへのトラフィックがこの制限を超えると、パーティションでスロットリングが発生する可能性があります。この問題を解決するには、以下の操作を行います。
-
DynamoDB 用の CloudWatch Contributor Insights を使用して、テーブル内で最も頻繁にアクセスされスロットリングされるキーを特定します。
-
ホットパーティションキーへのリクエストが時間の経過とともに分散されるように、テーブルへのリクエストをランダム化します。詳細については、「書き込みシャーディングを使用してワークロードを均等に分散させる」を参照してください。
ホットキーが原因でスロットリングの問題が発生している可能性がある
DynamoDB では、高いカーディナリティを持たないパーティションキーによって、少数のパーティションのみをターゲットとする多くのリクエストが発生する可能性があります。結果のホットパーティションが、1 秒あたり 3,000 RCU または 1,000 WCU のパーティション制限を超えると、スロットリングが発生する場合があります。
CloudWatch Contributor Insights (CCI) は、各テーブルの項目アクセスパターンの CCI グラフを提供して、この問題のデバッグを支援する診断ツールです。このツールを使用すると、DynamoDB テーブルの最も頻繁にアクセスされるキーやその他のトラフィックの傾向を継続的に監視できます。CloudWatch Contributor Insights の詳細については、「CloudWatch Contributor Insights for DynamoDB」を参照してください。詳細については、「パーティションキーを設計してワークロードを分散する」および「適切な DynamoDB パーティションキーの選択
トラフィックがテーブルごとのアカウントクォータを超えている
オンデマンドテーブルでは、テーブルレベルの読み取りスループットとテーブルレベルの書き込みスループットのクォータは、アカウントレベルで適用されます。デフォルトでは、テーブルスループットには最大 40,000 個の読み取りリクエストユニットと最大 40,000 個の書き込みリクエストユニットがあります。テーブルへのトラフィックがスループットのテーブルごとのアカウントクォータを超えると、テーブルでスロットリングが発生する可能性があります。この問題を解決するには、Service Quotas コンソールを使用して、アカウントのテーブルレベルの読み取りスループットまたは書き込みスループットのクォータを増やします。
テーブルのグローバルセカンダリインデックスがスロットリングされる
DynamoDB テーブルにスロットリングされているセカンダリグローバルインデックスがある場合、スロットリングによってベーステーブルにバックプレッシャースロットリングが発生する可能性があります。詳細については、「How does throttling on my global secondary index affect my Amazon DynamoDB table?