Amazon Athena クエリの実行に時間がかかっていて、クエリキューの時間が長いです。クエリを高速化する方法する方法を教えてください。
簡単な説明
Athena はサーバーレスのインタラクティブなクエリサービスです。Athena にクエリを送信すると、クエリはバックエンドのリソースプールで実行されます。このリソースは、リージョン内のすべてのユーザーが共有します。クエリが実行される前に一時的にキューに入れられる可能性があります。通常、クエリの実行には長い時間がかかります。これは、キューイング時間が長くなるか、エンジンの処理時間が長くなるためです。
解決方法
クエリ ID 用の GetQueryExecution API を呼び出します。この API は、クエリの 1 つの処理に関する情報を返します。この情報には、次のような便利な詳細情報が含まれています。
- クエリがキューイングに費やした時間 (QueryQueueTimeInMillis)
- クエリがプランニングに費やした時間 (QueryPlanningTimeInMillis)
- エンジンの処理時間 (EngineExecutionTimeInMillis)
この情報は、API レスポンスの**統計**パラメータで確認できます。
長いキューイング時間
バックエンドのリソース使用率が高いために、クエリのキューイング時間が長くなる可能性があります。Athena のキューイング時間は、リソースの割り当てによって異なります。Athena にクエリを送信すると、次に従いリソースを割り当てることでクエリが処理されます。
クエリのキューイング時間が長い場合は、次の操作を実行してクエリのパフォーマンスを向上させます。
- 一定期間にわたってクエリを分散することを検討してください。クエリをバッチで送信する場合は、大きなバッチの送信頻度を少なくして、小さなバッチの送信頻度を高めます。これにより、クエリが QUEUED 状態にとどまる時間が短縮され、全体的なクエリ処理時間が短縮されます。
- 複雑なクエリのセットを同時に実行するのではなく、単純なクエリと複雑なクエリの組み合わせを実行します。また、単純なクエリを最初に送信し、次に複雑なクエリを送信することを検討してください。単純なクエリは短時間で処理されるため、リソースは、長いキューイング時間を要することなく、複雑なクエリに割り当てることができます。
- 定期的なレポートの生成や、新しいパーティションのロードなど、シナリオでクエリをスケジュールする場合は、1 時間の開始時にスケジュールしたり、時間枠から 30 分過ぎてスケジュールしたりしないようにしてください。ほとんどの自動スクリプトと cron ジョブは、これらの時間枠内に実行されます。したがって、通常、このような時間帯はサービスの負荷が高くなり、キューイング時間が長くなります。
- ユースケースで許可されている場合は、複数のリージョンでクエリを実行します。これにより、負荷が分散され、より多くのバックエンドリソースを取得できます。このアプローチにより、クエリのキューイング時間を短縮できます。
重要: Amazon Simple Storage Service (Amazon S3) クロスリージョン料金が発生する場合があります。
長いプランニング時間
クエリのプランニング時間が長い場合は、テーブルのパーティション超過が原因である可能性があります。数百または数千のパーティションを持つテーブルは、クエリ処理が遅くなる可能性があります。クエリのパフォーマンスを向上させるには、次のいずれか 1 つまたは複数を試してください。
- パーティションの数を減らすことを検討する。
- 一度に 1 つのパーティションに対してクエリを実行し、結果を連結する。
- パーティションプロジェクションを使用して、高度にパーティション化されたテーブルのクエリ処理を高速化し、パーティション管理を自動化する。
長い処理時間
クエリのエンジンの処理時間が長い場合は、次の操作を実行してクエリのパフォーマンスを向上させます。
- テーブルをパーティション化し、各クエリでスキャンするデータの量を制限します。パーティションは仮想列として機能し、列の値に基づいて関連するデータをまとめて保持します。テーブルをパーティション化すると、クエリのパフォーマンスが向上し、コストを削減できます。詳細については、データのパーティション分割を参照してください。
- クエリする Amazon S3 ファイルが小さい場合 (通常は 128 MB 未満)、クエリの処理時間が長くなる可能性があります。時間の増加は、S3 ファイルを開く、ディレクトリをリスト表示する、データ転送を設定するなどのタスクに伴うオーバーヘッドによるものです。Amazon EMR で S3DistCp ユーティリティを使用して、小さな S3 ファイルを大きなオブジェクトに結合します。オブジェクトを大きくすると、必要な Amazon S3 リクエストが少なくなるため、クエリの処理時間が短縮されます。
- パフォーマンスを向上させ、エンジンの処理時間を短縮するために、他のストレージとクエリの最適化を実行します。詳細については、「Amazon Athena のパフォーマンスチューニングヒントトップ 10」を参照してください。
注: リージョンのデフォルトのクエリ関連クォータに基づいて、複数のクエリを Athena に同時に送信できます。Athena は、全体的なサービス負荷と受信リクエストの数に基づいてリソースを割り当てることによってクエリを処理します。したがって、送信されたすべてのクエリが同時に実行されない可能性があります。
関連情報
Athena でのパフォーマンスチューニング