Amazon Athena クエリの実行に時間がかかり、クエリのキュー時間も長くなっています。
解決策
Athena クエリは、実行前に一時的にキューに入れられる場合があります。キュー時間またはエンジンの処理時間が長いために、クエリの実行に時間がかかっている可能性があります。
クエリ ID の GetQueryExecution API を呼び出します。この API は、処理された 1 つのクエリに関する情報を返します。この情報は、API レスポンスの QueryExecutionStatistics パラメータで確認できます。Athena クエリエディタを使用して、完了したクエリの統計と詳細を表示することもできます。
キュー時間が長い
バックエンドでのリソース使用率が高いために、クエリのキュー時間が長くなる可能性があります。Athena のキュー時間はリソース割り当てによって異なります。Athena にクエリを送信するとクエリにリソースが割り当てられ、次の基準で処理されます。
クエリのキュー時間が長い場合は、クエリのパフォーマンスを改善するために次の操作を行ってください。
- 一定期間にわたってクエリを分散します。クエリをバッチで送信する場合は、大きなバッチを低い頻度で送信するのではなく、小さなバッチを高い頻度で送信してください。これにより、クエリが QUEUED の状態にとどまる時間を短縮できます。
- 一連の複雑なクエリを同時に実行するのではなく、単純なクエリと複雑なクエリを組み合わせて実行します。ここでは、最初に単純なクエリを送信しから複雑なクエリを送信してください。単純なクエリは迅速に処理されるため、キュー時間が長くなるのを回避して複雑なクエリにリソースを割り当てることができます。
- スケジュールされたクエリについては、毎時 0 分や毎時 30 分の時間枠は避けてください。これは、ほとんどの自動スクリプトと cron ジョブがこれらの時間枠で実行されるためです。通常、これらの時間枠ではサービスの負荷が高くなるため、キュー時間が長くなることがあります。
- ユースケースが許せば、複数の AWS リージョンでクエリを実行して負荷を分散し、より多くのバックエンドリソースを取得できるようにしてください。
重要: Amazon Simple Storage Service (Amazon S3) のクロスリージョン料金が発生する可能性があります。
長い計画時間
テーブルを過剰にパーティション化すると、計画時間が長くなる可能性があります。テーブルに数百または数千のパーティションがあると、クエリの処理速度が遅くなる可能性があります。クエリのパフォーマンスを改善するには、以下のいずれかのアクションを実行してください。
- パーティションの数を減らす。
- 一度に 1 つのパーティションに対してクエリを実行し、結果を結合する。
- パーティションプロジェクションを使用して、高度にパーティション化されたテーブルのクエリ処理時間を短縮し、パーティション管理を自動化する。
長い処理時間
クエリのエンジン処理時間が長い場合は、次のアクションを実行してクエリのパフォーマンスを改善してください。
- テーブルをパーティション化して、各クエリがスキャンするデータの量を制限します。詳細については、「Athena でのデータのパーティション化 」を参照してください。
- クエリする Amazon S3 ファイルが小さい場合 (128 MB 未満など) は、クエリ処理時間が長くなる可能性があります。この時間の増加は、S3 ファイルを開いたり、ディレクトリを一覧表示したり、データ転送を設定したりするなどのタスクが増えるためです。Amazon EMR の S3DistCp ツールを使用すると、小さな S3 ファイルをオブジェクトにまとめることができます。オブジェクトが大きいほど、必要な Amazon S3 リクエストが少なくなり、クエリの処理時間が短縮されます。
- 他のストレージとクエリの最適化を行います。
**注:**ご自身のリージョンのデフォルトのクエリ関連クォータに基づいて、複数のクエリを Athena に同時に送信できます。Athena では、サービス全体の負荷とクエリを処理するための新しいリクエストの数に基づいてリソースが割り当てられます。そのため、送信したすべてのクエリが同時に実行されない場合があります。
関連情報
Athena でのパフォーマンスのチューニング