为什么我的 Amazon Athena 查询需要很长时间才能运行?

1 分钟阅读
0

我的 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 中的性能优化

AWS 官方
AWS 官方已更新 1 年前