Amazon Redshift
数据库开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

WLM 查询队列跳跃

由于 WLM 超时查询监控规则 (QMR) 跃点操作,可能会跳过查询。您只能在手动 WLM 配置中跳转查询。

当跳过查询时,WLM 会尝试根据 WLM 队列分配规则将该查询路由到下一个匹配的队列。如果查询不与任何其他队列定义匹配,则查询会被取消。它不会分配给默认队列。

WLM 超时操作

下表总结了具有 WLM 超时的不同类型查询的行为。

查询类型 操作
INSERT、UPDATE 和 DELETE Cancel
用户定义的函数 (UDF) Cancel
UNLOAD Cancel
COPY 继续执行
维护操作 继续执行
处于 returning 状态的只读查询 继续执行
处于 running 状态的只读查询 重新分配或重新启动
CREATE TABLE AS (CTAS)、SELECT INTO 重新分配或重新启动

WLM 超时队列跳跃

如果下列类型的查询超时,WLM 会跳过它们:

  • 只读查询,例如 WLM 状态为 running 的 SELECT 语句。要了解查询的 WLM 状态,请查看 STV_WLM_QUERY_STATE 系统表中的 STATE 列。

  • CREATE TABLE AS (CTAS) 语句。WLM 队列跳跃支持用户定义的和系统生成的 CTAS 语句。

  • SELECT INTO 语句。

不受 WLM 超时约束的查询将继续在原始队列中运行,直到完成为止。以下类型的查询不受 WLM 超时约束:

  • COPY 语句

  • 维护操作,例如 ANALYZE 和 VACUUM

  • 只读查询,例如 WLM 状态达到 returning 的 SELECT 语句。要了解查询的 WLM 状态,请查看 STV_WLM_QUERY_STATE 系统表中的 STATE 列。

没有资格因 WLM 超时跳过的查询将在超时时被取消。下列类型的查询没有资格因 WLM 超时跳过:

  • INSERT、UPDATE 和 DELETE 语句

  • UNLOAD 语句

  • 用户定义的函数 (UDF)

WLM 超时重新分配并重新启动查询

当跳过查询并且找不到匹配的队列时,该查询将被取消。

当跳过查询并且找到匹配的队列时,WLM 会尝试将该查询重新分配给新队列。如果无法重新分配查询,则它会在新队列中重新启动,如下所述。

只有在满足以下所有条件时,才会重新分配查询:

  • 找到匹配的队列。

  • 新队列有足够多的空闲插槽来运行查询。如果 wlm_query_slot_count 参数设置为大于 1 的值,则查询可能需要多个插槽。

  • 新队列具有至少与查询当前使用的一样多的可用内存。

如果重新分配查询,则查询将继续在新队列中执行。将会保留中间结果,这样对总体执行时间造成的影响可降至最低。

如果无法重新分配查询,则该查询会被取消并在新队列中重新启动。中间结果会被删除。查询会在队列中等待,然后在有足够多的插槽可用时开始运行。

QMR 跃点操作

下表总结了具有 QMR 跃点操作的不同类型查询的行为。

查询类型 操作
COPY 继续执行
维护操作 继续执行
用户定义的函数 (UDF) 继续执行
UNLOAD 重新分配或继续执行
INSERT、UPDATE 和 DELETE 重新分配或继续执行
处于 returning 状态的只读查询 重新分配或继续执行
处于 running 状态的只读查询 重新分配或重新启动
CREATE TABLE AS (CTAS)、SELECT INTO 重新分配或重新启动

要查明由 QMR 跳过的查询是否已重新分配、重新启动或取消,请查询 STL_WLM_RULE_ACTION 系统日志表。

QMR 跃点操作重新分配并重新启动查询

当跳过查询并且找不到匹配的队列时,该查询将被取消。

当跳过查询并且找到匹配的队列时,WLM 会尝试将该查询重新分配给新队列。如果无法重新分配查询,则它会在新队列中重新启动或在原始队列中继续执行,如下所述。

只有在满足以下所有条件时,才会重新分配查询:

  • 找到匹配的队列。

  • 新队列有足够多的空闲插槽来运行查询。如果 wlm_query_slot_count 参数设置为大于 1 的值,则查询可能需要多个插槽。

  • 新队列具有至少与查询当前使用的一样多的可用内存。

如果重新分配查询,则查询将继续在新队列中执行。将会保留中间结果,这样对总体执行时间造成的影响可降至最低。

如果无法重新分配查询,则该查询会重新启动或在原始队列中继续执行。如果无法重新启动查询,则该查询会被取消并在新队列中重新启动。中间结果会被删除。查询会在队列中等待,然后在有足够多的插槽可用时开始执行。