我的 Amazon Athena 查询需要很长时间才能运行,而且查询排队时间很长。
解决方案
您的 Athena 查询可能会在运行之前暂时性地排队。由于排队时间长或引擎处理时间长,查询可能需要很长时间才能运行。
为您的查询 ID 调用 GetQueryExecution API。此 API 返回有关单个已处理查询的信息。您可以在 API 响应的 QueryExecutionStatistics 参数中查看此信息。您还可以使用 Athena 查询编辑器来查看已完成查询的统计数据和详细信息。
更长的排队时间
由于后端资源使用率高,您的查询的排队时间可能会很长。Athena 中的排队时间取决于资源分配。在您向 Athena 提交查询后,系统会为查询分配资源并按照以下标准进行处理:
如果您的查询排队时间较长,请采取以下措施来提高查询性能:
- 在一段时间内分发您的查询。如果您批量提交查询,请更频繁地小批量查询,而不是降低大批量查询的频率。这可以减少查询处于 QUEUED 状态的时间。
- 组合运行简单和复杂查询,而不是同时运行一组复杂的查询。先提交简单查询,然后提交复杂查询。由于简单查询的处理速度很快,因此您可以为复杂的查询分配资源,而无需花费大量的排队时间。
- 对于计划查询,请避开每小时的开始时段和每小时的后 30 分钟时段。这是因为大多数自动化脚本和定时任务都在这些时间范围内运行。在这些时段,服务负载通常很高,可能会导致排队时间延长。
- 如果您的使用案例允许,请在多个 AWS 区域运行查询以分配负载并帮助获取更多后端资源。
**重要事项:**您可能会产生 Amazon Simple Storage Service(Amazon S3)跨区域费用。
更长的计划时间
对表进行过度分区时,可能会导致计划时间延长。具有数百或数千个分区的表可能会导致查询处理时间变慢。要提高查询性能,请采取以下任一操作:
- 减少分区的数量。
- 一次查询一个分区并合并结果。
- 使用分区投影来加快高度分区表的查询处理时间,并自动进行分区管理。
更长的处理时间
如果您的查询的引擎处理时间较长,则采取以下措施来提高查询性能:
- 对表进行分区以限制每个查询扫描的数据量。有关更多信息,请参阅在 Athena 中对数据进行分区。
- 如果您查询的 Amazon S3 文件很小,例如小于 128 MB,则查询处理时间可能会更长。时间变长是因为任务增加,例如打开 S3 文件、列出目录和设置数据传输时。使用 Amazon EMR 中的 S3DistCp 工具将较小的 S3 文件合并为更大的对象。较大的对象需要更少的 Amazon S3 请求从而缩短查询处理时间。
- 执行其他存储和查询优化。
**注意:**您可以根据您所在地区的默认查询相关配额同时向 Athena 提交多个查询。Athena 根据总体服务负载和处理查询的新请求数量分配资源。因此,您提交的所有查询可能无法同时运行。
相关信息
Athena 中的性能优化