Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

WLM 查询队列跳跃

由于 WLM 超时查询监控规则 (QMR) 跃点操作,可能会跳过查询。

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

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 跃点操作会跳过以下类型的查询:

  • INSERT、UPDATE 和 DELETE 语句。

  • 只读查询,例如 SELECT 语句。

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

  • SELECT INTO 语句。

不受 QMR 跃点操作约束的查询将继续在原始队列中运行,直到完成为止。以下类型的查询不受 QMR 跃点操作约束:

  • COPY 语句。

  • UNLOAD 语句。

  • 用户定义的函数 (UDF)。

  • 维护操作,例如 ANALYZE 和 VACUUM。

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

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

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

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

  • 找到匹配的队列。

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

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

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

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

如果无法重新分配以下类型的查询,则将重新启动这些查询:

  • 只读查询,例如 WLM 状态为 running 的 SELECT 语句

  • CREATE TABLE AS (CTAS) 语句

  • SELECT INTO 语句

如果无法重新分配以下类型的查询,它们将继续在原始队列中执行:

  • INSERT、UPDATE 和 DELETE 语句

  • WLM 状态达到 returning 的只读查询

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

WLM 查询队列跳跃汇总

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

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

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

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