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

1 分钟阅读
0

我的 Amazon Athena 查询需要很长时间才能完成运行。查询排队时间很长。如何加快查询处理速度?

简短描述

Athena 是一项无服务器交互式查询服务。在您向 Athena 提交查询后,后端的资源池上将运行您的查询。这些资源由区域中的所有用户共享。您的查询可能会在短暂排队后才能运行。由于排队时间较长或引擎处理时间较长,查询通常需要很长时间才能运行。

解决方法

为您的查询 ID 调用 GetQueryExecution API。此 API 返回有关查询的单个处理的信息。这些信息包括有用的详细信息,示例如下:

  • 查询排队花费的时间 (QueryQueueTimeInMillis)
  • 查询计划花费的时间 (QueryPlanningTimeInMillis)
  • 引擎处理时间 (EngineExecutionTimeInMillis)

此信息可在 API 响应的 Statistics(统计)参数中查看。

排队时间较长

由于后端资源使用率高,查询的排队时间可能会较长。Athena 中的排队时间取决于资源分配。在您向 Athena 提交查询后,系统将根据以下信息分配资源来处理查询:

  • 总体服务负载
  • 传入请求数

如果查询的排队时间较长,请执行以下操作来提高查询性能:

  1. 考虑在一段时间内分配查询。如果您批量提交查询,则可以增加提交次数并减少每批查询数量,而不应减少提交次数并增加每批查询数量。这可能会缩短查询处于 QUEUED(已排队)状态的时间,并减少总体查询处理时间。
  2. 不要同时运行一组复杂查询,而应运行简单查询与复杂查询的组合。此外,考虑先提交简单查询,再提交复杂查询。由于简单查询的处理速度很快,因此资源可以分配给复杂查询,而不会导致排队时间延长。
  3. 如果要在生成定期报告或加载新分区等情景中计划查询,则应避免在小时时段开始时和小时时段过后 30 分钟计划查询。大多数自动化脚本和 Cron 作业都在这些时段内运行。因此,在这些时段内,服务负载通常会更高,从而增加排队时间。
  4. 如果您的使用案例允许,请在多个区域中运行查询。此举可以分布负载,帮助获取更多后端资源。这种方法可以缩短查询排队时间。
    重要提示:您可能会产生 Amazon Simple Storage Service(Amazon S3)跨区域费用。

计划时间较长

如果查询的计划时间较长,则可能是由于对表进行过度分区所致。具有数百或数千个分区的表可能会导致查询处理速度变慢。要提高查询性能,请尝试以下一项或多项操作:

  • 考虑减少分区的数量。
  • 一次查询一个分区并串联结果。
  • 使用分区投影来加快分区较多的表的查询处理速度,并自动进行分区管理。

处理时间较长

如果查询的引擎处理时间较长,请执行以下操作来提高查询性能:

  1. 对表进行分区,以限制每个查询扫描的数据量。分区充当虚拟列,并根据列值将相关数据保存在一起。对表进行分区可以提高查询性能并降低成本。有关更多信息,请参阅对数据进行分区
  2. 如果您查询的 Amazon S3 文件很小(通常小于 128MB),则查询处理时间可能会较长。打开 S3 文件、列出目录和设置数据传输等任务所涉及的开销导致时间增加。使用 Amazon EMR 上的 S3DistCp 实用工具将较小的 S3 文件合并为较大的对象。对象越大,需要的 Amazon S3 请求越少,从而缩短了查询处理时间。
  3. 执行其他存储和查询优化可以提高性能并缩短引擎处理时间。有关更多信息,请参阅 Amazon Athena 的十大性能优化技巧

**注意:**您可以根据所在区域的默认查询相关配额同时向 Athena 提交多个查询。Athena 根据总体服务负载和传入请求数分配资源,以此处理查询。因此,您提交的所有查询可能无法同时运行。


相关信息

Athena 性能优化

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