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

最終更新日: 2020 年 6 月 16 日

Amazon DynamoDB 要求の応答時間が長くなっています。このような問題が発生する理由と、解決方法を教えてください。

解決方法

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

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

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

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

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

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

改善できることはありますか?


さらにサポートが必要な場合