使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

为什么我的 Amazon Redshift 查询超过了我设置的 WLM 超时?

1 分钟阅读
0

我为 Amazon Redshift 查询设置了工作负载管理 (WLM) 超时,但查询在此期限到期后继续运行

简述

WLM 超时仅适用于查询运行阶段的查询。如果 WLM 没有按预期终止查询,通常是由于查询在执行阶段以外的阶段花了时间。例如,查询可能会等待解析或重写,等待锁定,或者等待 WLM 队列中的某个位置。或者,查询可能进入了返回阶段或跳到另一个队列。

解决方法

查询 STV_RECENTS 时,starttime 是查询进入集群的时间,而不是查询开始运行的时间。当查询在 STV_RECENTS 中处于 Running 状态时,它在系统中处于活动状态。但是,此查询在进入 STV_INFLIGHT 状态之前不会使用计算节点资源。有关查询计划的更多信息,请参阅查询计划和执行工作流

要查看正在运行的查询的状态,查询 STV_INFLIGHT 而不是 STV_RECENTS:

select \* from STV\_INFLIGHT where query = your\_query\_id;

有关查询阶段的更多信息,请运行以下查询:

select \* from SVL\_QUERY\_REPORT where query = your\_query\_id ORDER BY segment, step, slice;

使用 STV_EXEC_STATE 表查找在计算节点上正在运行的任何查询的当前状态:

select \* from STV\_EXEC\_STATE where query = your\_query\_id ORDER BY segment, step, slice;

以下是查询运行时间可能好像超过了 WLM 超时期限的常见原因。

查询处于“返回”阶段

有两个“返回”步骤。检查 STV_EXEC_STATE,查看查询是否已进入以下返回阶段之一:

  • 从计算节点返回领导节点
  • 从领导节点返回客户端

正在进行回滚

数据操作语言 (DML) 操作可能会遇到错误并回滚。此操作可能不会显示“已停止”,因为它已经在回滚过程中。您可以查询 STV_EXEC_STATE 来查看回滚情况,并可以在 STL_UNDONE 中找到更多信息。

查询在花时间排队等待运行

查询 STV_WLM_QUERY_STATE 来查看排队时间:

select \* from STV\_WLM\_QUERY\_STATE where query = your\_query\_id;

查询在等待锁定

如果查询在 STV_RECENTS 中可见,但在 STV_WLM_QUERY_STATE 中不可见,说明查询可能在等待锁定,还未进入队列。有关更多信息,请参阅如何在 Amazon Redshift 中检测和释放锁定?

有查询跳到了另一个队列

如果有读取查询达到当前 WLM 队列的超时限制,此查询将被推送到下一个 WLM 队列。或者,如果有指定跳转操作的查询监控规则,查询将被推送到下一个 WLM 队列。要确认查询是否跳到下一个队列,根据您的场景完成以下查询:

要阻止查询跳到另一个队列,配置 WLM 队列WLM 查询监控规则。有关查询跳转的更多信息,请参阅 WLM 查询队列跳转

网络或防火墙问题

如果 Amazon Redshift 服务器在与您的客户端通信时出现问题,服务器可能会卡在“返回客户端”状态。检查是否与网络组件发生冲突,如入站本地防火墙设置、出站安全组规则或出站网络访问控制列表(网络 ACL)规则。有关更多信息,请参阅从 Amazon EC2 外部连接 -- 防火墙超时问题

出现集群问题

集群本身的问题(如硬件问题)可能会导致查询冻结。当查询由于群集问题冻结时,集群会处于“硬件故障”状态。要恢复单节点集群,还原快照。在多节点集群中,故障节点会被自动替换。

相关信息

调整查询性能

分析和改进查询

AWS 官方
AWS 官方已更新 10 个月前