サービスの利用を最適化する
サービスレベルに関する考慮事項には、アカウントごとに実行するワークロードの数、Athena だけでなくサービス全体でのサービスクォータ、「リソース不足」エラーを減らす方法の検討が含まれます。
サービスクォータの制限を回避するために、アカウントごとに 1 つのワークロードを実行する
Athena では、クエリ実行時間、アカウント内の同時クエリ数、API リクエスト率などの指標に対してクォータを適用しています。これらのクォータの詳細については、「Service Quotas」を参照してください。これらのクォータを超えると、送信時またはクエリ実行中にクエリが失敗します。
このページのパフォーマンス最適化の多くのヒントは、クエリの実行時間を短縮するのに役立ちます。最適化によって容量の制限がなくなり、同時実行クォータ内でより多くのクエリを実行できるようになり、実行時間が長すぎたためにクエリがキャンセルされるのを防ぐことができます。
同時実行クエリと API リクエストの数のクォータは、AWS アカウント および AWS リージョン ごとです。ワークロードが同じクォータに対して競合しないように、AWS アカウント につき 1 つのワークロードを実行する (またはプロビジョニング済みのキャパシティ予約を別々に使用する) ことをお勧めします。
同じアカウントで 2 つのワークロードを実行すると、そのうちの 1 つのワークロードで大量のクエリを実行できます。これにより、残りのワークロードがスロットリングされたり、クエリの実行がブロックされたりする可能性があります。これを回避するには、ワークロードを個別のアカウントに移動して、各ワークロードに独自の同時実行クォータを割り当てることができます。片方または両方のワークロードのプロビジョニング済みキャパシティ予約を作成しても、同じ目標が達成されます。
他のサービスのクォータを検討する
Athena がクエリを実行すると、クォータを適用する他のサービスを呼び出せます。クエリの実行中に、Athena は AWS Glue Data Catalog、Amazon S3、および IAM や AWS KMS などその他の AWS サービスなどに API 呼び出しを行えます。フェデレーションクエリを使用する場合、Athena は AWS Lambda に呼び出しも行います。これらのサービスにはすべて、超過できる独自の制限と割り当てがあります。クエリ実行でこれらのサービスからエラーが発生すると、ソースサービスからのエラーも含めて失敗します。復元可能なエラーは再試行されますが、問題が時間内に解決されない場合、クエリが失敗する可能性があります。エラーメッセージをよく読んで、Athena からのものか別のサービスからのものかを判断してください。関連するエラーの一部については、このパフォーマンスチューニングに関するセクションで説明します。
Amazon S3 サービスクォータに起因するエラーの回避方法の詳細については、このドキュメントの後半の「ファイルが多すぎにならないようにする」を参照してください。Amazon S3 のパフォーマンスの最適化の詳細については、「Amazon S3 ユーザーガイド」の「ベストプラクティスの設計パターン: Amazon S3 パフォーマンスの最適化」を参照してください。
「リソース不足」エラーを減らす
Athena は分散クエリエンジンでクエリを実行します。クエリを送信すると、Athena エンジンのクエリプランナーはクエリを実行するのに必要な計算能力を見積もり、それに応じて計算ノードのクラスターを準備します。DDL クエリなどの一部のクエリは、1 つのノードでのみ実行されます。大規模なデータセットに対する複雑なクエリでは、はるかに大きなクラスターで実行されます。ノードは均一であり、メモリ、CPU、およびディスク構成は同じです。Athena は、より要求の厳しいクエリを処理するためにスケールアップするのではなく、スケールアウトします。
クエリの要求は、クエリを実行するクラスターで使用可能なリソースを超えることがあります。この場合にはクエリは失敗し、「このスケールファクターでリソースを使い果たしました
」というエラーが表示されます。
最も一般的に消費されるリソースはメモリですが、まれにディスク容量になる場合もあります。メモリエラーは通常、エンジンが結合またはウィンドウ関数を実行するときに発生しますが、カウントや集計が異なる場合もあります。
クエリが「リソース不足」エラーで一度失敗した場合でも、もう一度実行すると成功する可能性があります。クエリの実行は確定的ではありません。データの読み込みにかかる時間や中間データセットがノードにどのように分散されるかなどの要因により、リソースの使用量が異なる場合があります。たとえば、2 つのテーブルを結合するクエリで、結合条件の値の分布に大きな偏りがあるとします。このようなクエリはほぼ成功しますが、最も一般的な値が同じノードで処理されてしまうと失敗することがあります。
クエリが利用可能なリソースを超えないようにするには、このドキュメントに記載されているパフォーマンスチューニングのヒントを参考にしてください。特に、使用可能なリソースを使い果たすクエリを最適化する方法のヒントについては、「結合を最適化する」、「ウィンドウ関数の範囲を縮小したり、削除したりする」、および「近似値を使用してクエリを最適化する」を参照してください