Amazon DynamoDB テーブルでの高レイテンシーをトラブルシューティングするにはどうすればよいですか?

所要時間1分
0

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

解決方法

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」(レイテンシーの影響を受けやすい 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 のメトリクスを有効にする)

AWS公式
AWS公式更新しました 2年前
コメントはありません