Amazon DynamoDB リクエストのレスポンスの時間が長くなっています。
解決方法
DynamoDB テーブルで高レイテンシーをトラブルシューティングするには、Amazon CloudWatch メトリクス SuccessfulRequestLatency を分析し、平均レイテンシーを確認します。レイテンシーの一時的な急増は、心配する必要はありません。しかし、平均レイテンシーが高い場合は、解決すべき根本的な問題がある可能性があります。
DynamoDB 呼び出しのすべてのレイテンシー値を取得するには、AWS SDK のレイテンシーメトリクスのログ記録をオンにします。これらのメトリクスは、レイテンシーの増加の原因を特定するのに役立ちます。DynamoDB のレイテンシーメトリクスは、DynamoDB または Amazon DynamoDB Streams 内のアクティビティのみ測定することにご注意ください。レイテンシーメトリクスでは、ネットワークレイテンシーやクライアント側のアクティビティは考慮されません。
注: GetItem や PutItem など、ほとんどのアトミックオペレーションでは、1 桁のミリ秒単位で平均レイテンシーを予測できます。Query や Scan などのアトミックオペレーションではないレイテンシーは、結果セットのサイズ、クエリ条件とフィルターの複雑さなど、多くの要因によって決まります。
レイテンシーを短縮するには、以下の戦略のうち 1 つまたは複数を検討してください。
- リクエストのタイムアウト設定を減らす: クライアント SDK パラメータの requestTimeOut と clientExecutionTimeout を調整してタイムアウトし、失敗するまでの時間を大幅に短縮(50 ミリ秒後など)します。これにより、クライアントは指定された時間が経過した後に高レイテンシーのリクエストを破棄し、 2 番目のリクエストを送信して、通常は最初のリクエストよりもはるかに速く完了します。タイムアウト設定の詳細については、「Tuning AWS Java SDK HTTP request settings for latency-aware Amazon DynamoDB applications」(レイテンシーの影響を受けやすい Amazon DynamoDB アプリケーションの AWS Java SDK HTTP リクエスト設定の調整) を参照してください。
- クライアントと DynamoDB エンドポイントの間の距離を短くする: ユーザーがグローバルに分散している場合は、グローバルテーブルの使用を検討してください。グローバルテーブルを使用すると、テーブルを使用可能にする AWS リージョンを指定できます。このため、ユーザーのレイテンシーが大幅に短縮されます。また、DynamoDB ゲートウェイエンドポイントを使用して、インターネット経由のトラフィックを回避することも検討してください。
- キャッシュの使用: トラフィックの読み取り量が多い場合は、 Amazon DynamoDB Accelerator (DAX) などのキャッシュサービスの使用を検討してください。DAX は、DynamoDB 用のフルマネージド高可用性インメモリキャッシュで、1 秒あたりのリクエスト数が数百万件になる場合でも、ミリ秒からマイクロ秒への最大 10 倍のパフォーマンス向上を実現します。
- 一定のトラフィックを送信する、または接続を再利用する: リクエストを行わない場合は、クライアントに DynamoDB テーブルへダミートラフィックを送信させることを検討してください。または、クライアント接続を再利用するか、接続プーリングを使用できます。これらの手法はどれも、内部のキャッシュウォームを維持するため、レイテンシーを低く抑えることができます。
- 結果整合性のある読み取りを使用する: アプリケーションが強い整合性のある読み取りを必要としない場合は、結果整合性のある読み取りの使用を検討してください。結果整合性のある読み取りは安価で、長いレイテンシーが発生する可能性が低くなります。詳細については、「読み取り整合性」をご参照ください。
関連情報
Enabling metrics for the AWS SDK for Java (AWS SDK for Java のメトリクスを有効にする)