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 的值,则查询可能需要多个插槽。
-
新队列具有至少与查询当前使用的一样多的可用内存。
如果重新分配查询,则查询将继续在新队列中执行。将会保留中间结果,这样对总体执行时间造成的影响可降至最低。
如果无法重新分配查询,则该查询会重新启动或在原始队列中继续执行。如果无法重新启动查询,则该查询会被取消并在新队列中重新启动。中间结果会被删除。查询会在队列中等待,然后在有足够多的插槽可用时开始执行。