Amazon DynamoDB テーブルでの高レイテンシーをトラブルシューティングする方法を教えてください。

最終更新日: 2021年11月19日

Amazon DynamoDB リクエストの応答時間が長くなっています。

解決方法

Amazon CloudWatch メトリクス SuccessfulRequestLatency を分析する際には、平均のレイテンシーを確認することをお勧めします。レイテンシーの一時的な急増は、心配する必要はありません。しかし、平均レイテンシーが高い場合は、解決すべき根本的な問題がある可能性があります。

DynamoDB 呼び出しのすべてのレイテンシー値を取得するには、AWS SDK のレイテンシーメトリクスのログ記録をオンにします。これらのメトリクスは、レイテンシーの増加の原因を特定するのに役立ちます。DynamoDB のレイテンシーメトリクスは、DynamoDB または Amazon DynamoDB Streams 内のアクティビティのみ測定することにご注意ください。レイテンシーメトリクスでは、ネットワークレイテンシーやクライアント側のアクティビティは考慮されません。

注: GetItemPutItem など、ほとんどのアトミックオペレーションでは、1 桁のミリ秒単位で平均レイテンシーを予測できます。QueryScan などのアトミックオペレーションではないレイテンシーは、結果セットのサイズ、クエリ条件とフィルターの複雑さなど、多くの要因によって決まります。

レイテンシーを短縮するには、以下の戦略のうち 1 つまたは複数を検討してください。

  • リクエストのタイムアウト設定を減らす: クライアント SDK パラメータの requestTimeOutclientExecutionTimeout を調整してタイムアウトし、失敗するまでの時間を大幅に短縮(50 ミリ秒後など)します。これにより、クライアントは指定された時間が経過した後に高レイテンシーのリクエストを破棄し、 2 番目のリクエストを送信して、通常は最初のリクエストよりもはるかに速く完了します。タイムアウト設定の詳細については、Tuning AWS Java SDK HTTP request settings for latency-aware Amazon DynamoDB applications をご参照ください。
  • クライアントと DynamoDB エンドポイントの間の距離を減らす: ユーザーがグローバルに分散している場合は、グローバルテーブルの使用を検討してください。グローバルテーブルを使用すると、テーブルを使用可能にする AWS リージョンを指定できます。このため、ユーザーのレイテンシーが大幅に短縮されます。
  • キャッシュの使用: トラフィックの読み取り量が多い場合は、 Amazon DynamoDB Accelerator (DAX) などのキャッシュサービスの使用を検討してください。DAX は、DynamoDB 用のフルマネージド高可用性インメモリキャッシュで、1 秒あたりのリクエスト数が数百万件になる場合でも、ミリ秒からマイクロ秒への最大 10 倍のパフォーマンス向上を実現します。
  • 一定のトラフィックを送信する、または接続を再利用する: リクエストを行わない場合は、クライアントに DynamoDB テーブルへダミートラフィックを送信させることを検討してください。または、クライアント接続を再利用するか、接続プーリングを使用できます。これらの手法はどれも、内部のキャッシュウォームを維持するため、レイテンシーを低く抑えることができます。
  • 結果整合性のある読み取りを使用する: アプリケーションが強い整合性のある読み取りを必要としない場合は、結果整合性のある読み取りの使用を検討してください。結果整合性のある読み取りは安価で、長いレイテンシーが発生する可能性が低くなります。詳細については、「読み取り整合性」をご参照ください。

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


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