Amazon DynamoDB テーブルがスロットルされるのはなぜですか?

最終更新日: 2021 年 10 月 12 日

Amazon DynamoDB テーブルへの読み取りまたは書き込み操作がスロットルされています。

簡単な説明

スロットリングは、DynamoDB テーブルで発生する可能性がある最も一般的なパフォーマンス問題の 1 つです。スロットリングは、DynamoDB または DynamoDB テーブルへの読み取りまたは書き込みを行うアプリケーションのいずれかによって引き起こされる可能性があります。

直面する可能性のある一般的なスロットリングの問題には、次のものがあります。

  • DynamoDB テーブルには十分なプロビジョンドキャパシティーがありますが、ほとんどのリクエストはスロットルされています。
  • DynamoDB の AWS Application Auto Scaling を有効にしましたが、DynamoDB テーブルがスロットルされています。
  • DynamoDB テーブルはオンデマンドのキャパシティーモードですが、テーブルはスロットルされています。
  • テーブルにはホットパーティションがあります。

解決方法

スロットリングイベント中にモニタリングする必要がある DynamoDB メトリクスの詳細については、「DynamoDB メトリクスとディメンション」を参照してください。これらのメトリクスは、スロットルされたリクエストを作成するオペレーションを特定し、スロットルの原因を特定するのに役立ちます。ユースケースに基づいて、次のトラブルシューティングオプションを 1 つ以上お使いください。

DynamoDB テーブルには十分なプロビジョンドキャパシティーがありますが、ほとんどのリクエストはスロットルされています

DynamoDB は分レベルのメトリクスを Amazon CloudWatch にレポートします。メトリクスは、1 分間の合計として計算され、次に平均化されます。ただし、DynamoDB のレート制限は 1 秒単位で適用されます。

例えば、DynamoDB テーブルに 60 の書き込みキャパシティーユニットをプロビジョニングした場合、1 分で 3600 回の書き込みを実行できます。ただし、1 秒で 3600 個のリクエストをすべて実行し、残りの時間はリクエストがないと、スロットリングが発生する可能性があります。1 分あたりの読み取りキャパシティーユニットまたは書き込みキャパシティーユニットの合計数は、テーブルのプロビジョニングされたスループットより少ない場合があります。ただし、すべてのワークロードが数秒以内に収まると、リクエストがスロットルされる可能性があります。

この問題を解決するには、API コールにジッターとエクスポネンシャルバックオフを追加します。詳細については、「エクスポネンシャルバックオフとジッター」を参照してください。

AWS Application Auto Scaling を有効にしましたが、テーブルはまだスロットルされています

AWS Application Auto Scaling は、DynamoDB テーブルでのトラフィックの突然の急増に対処するのに適したソリューションではありません。Application Auto Scaling は、消費されたキャパシティーユニットの 2 つの連続するデータポイントが、1 分以内に設定されたターゲット使用率値を超えた場合にのみスケールアップを開始します。Application Auto Scaling は、消費されたキャパシティーがターゲットの使用率よりも高い状態が 2 分間継続した場合にのみ、プロビジョンドキャパシティーを自動的にスケーリングします。また、CloudWatch で消費されたキャパシティーの 15 個の連続するデータポイントが目標使用率を下回ると、スケールダウンイベントが開始されます。Application Auto Scaling が開始されると、UpdateTable API コールが呼び出されます。この呼び出しは、DynamoDB テーブルまたはインデックスのプロビジョンドキャパシティーを更新するのに数分かかる場合があります。Application Auto Scaling では、DynamoDB テーブルのプロビジョンドキャパシティーをスケールアップするために、より高いターゲット使用率の値を持つ連続したデータポイントが必要です。この期間中、テーブルのプロビジョンドキャパシティーを超えるリクエストはスロットルされます。したがって、Application Auto Scaling を使用して、DynamoDB で急増したワークロードを処理することはベストプラクティスではありません。詳細については、「DynamoDB Auto Scaling によるスループットキャパシティーの自動管理」を参照してください。

テーブルがオンデマンドキャパシティーモードを使用しているが、テーブルはまだスロットルされている

テーブルがオンデマンドキャパシティーモードを使用している場合、次の条件が当てはまる限り、テーブルはスロットルしません。

  • アクセスパターンは、ホットパーティションに関連する問題を回避するために、パーティション間で均等に分散されます。
  • このテーブルは、以前のピークトラフィックの 2 倍を超えません。

オンデマンドテーブルの場合、DynamoDB はトラフィック量が増加するにつれて自動的に容量を割り当てて、ワークロードにスロットリングが発生しないようにします。ただし、30 分以内にトラフィック量が前のピークの 2 倍を超えると、スロットリングが発生する可能性があります。詳細については、「ピークトラフィックとスケーリングのプロパティ」を参照してください。

テーブルにホットパーティションがある

DynamoDB では、高いカーディナリティを持たないパーティションキーは、少数のパーティションのみをターゲットとする多くのリクエストが発生し、ホットパーティションになる可能性があります。ホットパーティションは、1 秒あたり 3000 RCU または 1000 WCU(または両方の組み合わせ)のパーティション制限を超えると、スロットリングを引き起こす可能性があります。

テーブル内で最もアクセスされ、スロットルされた項目を見つけるには、Amazon CloudWatch Contributor Insights を使用します。Amazon CloudWatch Contributor Insights は、お使いの DynamoDB テーブルのトラフィックトレンドの概要を示し、最も頻繁にアクセスされるパーティションキーを特定するのに役立つ新しい診断用ツールです。このツールを使用すると、テーブルのアイテムアクセスパターンのグラフを継続的にモニタリングできます。ホットパーティションは、テーブルの全体的なパフォーマンスを低下させる可能性があります。このパフォーマンスの低下を回避するには、読み取り操作と書き込み操作をテーブル全体にできるだけ均等に分散します。詳細については、「パーティションキーを設計してワークロードを均等に分散する」を参照してください。適切なパーティションキーを選択する方法については、「適切な DynamoDB パーティションキーの選択」を参照してください。

注: CloudWatch Contributor Insights ツールを DynamoDB で使用すると、追加料金が発生します。詳細については、「DynamoDB 請求に関する CloudWatch Contributor Insights」を参照してください。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?