4- オンデマンドの最大スループットの超過 - Amazon DynamoDB

4- オンデマンドの最大スループットの超過

オンデマンドテーブルまたは GSI を設定する場合、オプションでテーブルまたはインデックスレベルで最大スループット制限 (MaxReadRequestUnits および MaxWriteRequestUnits) を設定して、コストの跳ね上がりを防止したり、ダウンストリームシステムが過負荷にならないようにしたりできます。最大スループットの詳細については、「オンデマンドテーブルの DynamoDB 最大スループット」を参照してください。

読み取りまたは書き込みの消費量がこれらの自己適用制限を超えると、制限を超える追加のリクエストはクイックスロットリングレスポンスを受け取ります。DynamoDB は、どのリソースがスループット境界に達したかを示す MaxOnDemandThroughputExceeded スロットリングの理由タイプの例外を返します。

オンデマンドの最大スループットがスロットリングを超過

このセクションでは、オンデマンドの最大スループット超過スロットリングシナリオの解決ガイダンスを提供します。このガイドを使用する前に、アプリケーションの例外処理から特定のスロットリングの理由を特定し、影響を受けるリソースの Amazon リソースネーム (ARN) を決定していることを確認します。スロットリングの理由の取得とスロットリングされたリソースの識別については、「DynamoDB スロットリング診断フレームワーク」を参照してください。

特定のスロットリングシナリオに進む前に、まずアクションが実際に必要かどうかを検討します。

  • 最大スループット設定を評価する: これらの制限は、コストを制御したり、ダウンストリームシステムを保護するように意図的に設定されました。MaxOnDemandThroughputExceeded スロットリングイベントを受信している場合、制限は設計どおりに機能しています。これらの制限の引き上げが、元のコストコントロールまたはシステム保護の目標と一致するかどうかを検討します。

  • アプリケーションの影響を評価する: スロットリングがアプリケーションまたはユーザーに実際に問題を引き起こしているかどうかを確認します。アプリケーションが再試行を効果的に処理し、時折スロットリングしてもパフォーマンス要件を満たしている場合は、現在の制限を維持することが適切な選択である可能性があります。

  • トラフィックパターンを確認する: スロットリングが予想されるトラフィックパターンを表すか、異常なスパイクを表すかを分析します。一貫して制限を超える予測可能で定期的なトラフィックパターンについては、最大スループット設定の調整が必要になる場合があります。一時的なスパイクの場合、制限を引き上げるよりも、より良いリクエスト分散戦略を実装する方が適切な場合があります。

考慮後、最大スループット設定を調整する必要があると判断した場合は、ターゲットを絞った修復オプションについて、以下の特定のスロットリングシナリオを参照してください。

TableReadMaxOnDemandThroughputExceeded

この問題が発生した場合

オンデマンドテーブルが、設定された最大読み取りスループットキャパシティを超えています。一般的な診断とモニタリング で CloudWatch メトリクスをモニタリングして、スロットリングイベントを分析できます。

修復オプション

スロットリングイベントに対処するには、以下の手順を検討します。

  • 最大スループット制限を引き上げる: DynamoDB コンソールAWS CLI、または DynamoDB UpdateTable API を使用して、影響を受けるテーブルの MaxReadRequestUnits の値を増やし、モニタリングして調整します。これにより、スロットリングが発生する前にテーブルでより高い読み取りスループットを処理できます。

  • 最大制限を削除する: MaxReadRequestUnits-1 に設定すると上限が削除され、アカウントレベルのスループットクォータまで需要に応じてスケーリングできます。これにより、カスタム制限は削除されますが、AWS のアカウントレベルの保護は維持されます。ただし、テーブルがアカウントレベルのクォータに達する前に大幅に多くのキャパシティを消費するようになったため、この制限を削除した後は支出を注意深くモニタリングすることが重要です。

TableWriteMaxOnDemandThroughputExceeded

この問題が発生した場合

オンデマンドテーブルが、設定された最大書き込みスループットキャパシティを超えています。一般的な診断とモニタリング で CloudWatch メトリクスをモニタリングして、スロットリングイベントを分析できます。

修復オプション

スロットリングイベントに対処するには、以下の手順を検討します。

  • 最大スループット制限を引き上げる: DynamoDB コンソールAWS CLI、または DynamoDB UpdateTable API を使用して、影響を受けるテーブルの MaxWriteRequestUnits の値を増やし、モニタリングして調整します。

  • 最大制限を削除する: MaxWriteRequestUnits-1 に設定すると上限が削除され、アカウントレベルのスループットクォータまで需要に応じてスケーリングできます。これにより、カスタム制限は削除されますが、AWS のアカウントレベルの保護は維持されます。ただし、テーブルがアカウントレベルのクォータに達する前に大幅に多くのキャパシティを消費するようになったため、この制限を削除した後は支出を注意深くモニタリングすることが重要です。

IndexReadMaxOnDemandThroughputExceeded

この問題が発生した場合

オンデマンドモードでの GSI への読み取りリクエストが、GSI で設定された最大読み取りスループットキャパシティを超えました。一般的な診断とモニタリング で CloudWatch メトリクスをモニタリングして、スロットリングイベントを分析できます。

修復オプション

スロットリングイベントに対処するには、以下の手順を検討します。

  • GSI 最大スループット制限を引き上げる: DynamoDB コンソールAWS CLI、または DynamoDB UpdateTable API を使用して、影響を受ける GSI の MaxReadRequestUnits の値を増やし、モニタリングして調整します。

  • GSI の最大制限を削除する: GSI の MaxReadRequestUnits-1 に設定すると上限が削除され、アカウントレベルのスループットクォータまで需要に応じてスケーリングできます。これにより、カスタム制限は削除されますが、AWS のアカウントレベルの保護は維持されます。ただし、この制限を削除した後は、支出を注意深くモニタリングすることが重要です。

IndexWriteMaxOnDemandThroughputExceeded

この問題が発生した場合

基本テーブルの項目を更新すると、GSI が設定した最大書き込みスループットキャパシティを超えるオンデマンドモードで GSI に書き込みが行われ、バックプレッシャースロットリングが発生します。一般的な診断とモニタリング で CloudWatch メトリクスをモニタリングして、スロットリングイベントを分析できます。

修復オプション

スロットリングイベントに対処するには、以下の手順を検討します。

  • GSI 最大スループット制限を引き上げる: DynamoDB コンソールAWS CLI、または DynamoDB UpdateTable API を使用して、影響を受ける GSI の MaxWriteRequestUnits の値を増やし、モニタリングして調整します。

  • GSI の最大制限を削除する: GSI の MaxWriteRequestUnits-1 に設定すると上限が削除され、アカウントレベルのスループットクォータまで需要に応じてスケーリングできます。これにより、カスタム制限は削除されますが、AWS のアカウントレベルの保護は維持されます。ただし、この制限を削除した後は、支出を注意深くモニタリングすることが重要です。

一般的な診断とモニタリング

オンデマンドの最大スループットがスロットリングイベントを超えた場合、いくつかの CloudWatch メトリクスが根本原因とスケーリングパターンの特定に役立ちます。

重要な CloudWatch メトリクス

これらの主要なメトリクスをモニタリングして、オンデマンドの最大スループットがスロットリングを超えたことを診断します。

分析アプローチ

以下の手順に従って、オンデマンドの最大スループットが診断を超過したことを確認します。

  1. 消費されたキャパシティと最大キャパシティ制限を比較する - 消費が一貫して最大制限に近づいているか、または超えているかを確認します。

  2. スロットリングイベントの頻度とタイミングを確認して、パターンを特定します。スロットリングイベントと一致する消費キャパシティの突然の増加を探します。

  3. CloudWatch Contributor Insights を使用して、キャパシティを最も多く消費する項目またはパーティションキーを特定します。