

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# WLM 查询队列跳过
<a name="wlm-queue-hopping"></a>

使用 Amazon Redshift，您可以通过启用 WLM（工作负载管理）查询队列跳转来管理工作负载并发性和资源分配。该功能允许查询在资源可用时从指定队列临时“跳转”到更高优先级的队列，从而提高整体查询性能和系统利用率。以下各节将提供在 Amazon Redshift 中配置和使用 WLM 查询队列跳转的详细指导。

由于 [WLM 超时](cm-c-defining-query-queues.md#wlm-timeout)或[查询监控规则 (QMR) 跃点操作](cm-c-wlm-query-monitoring-rules.md#cm-c-wlm-defining-query-monitoring-rules)，可能会跳过查询。您只能在手动 WLM 配置中跳转查询。

当跳过查询时，WLM 会尝试根据 [WLM 队列分配规则](cm-c-wlm-queue-assignment-rules.md)将该查询路由到下一个匹配的队列。如果查询不与任何其他队列定义匹配，则查询会被取消。它不会分配给默认队列。

## WLM 超时操作
<a name="wlm-queue-hopping-summary"></a>

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


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

## WLM 超时队列跳过
<a name="wlm-timeout-queue-hopping"></a>

如果下列类型的查询超时，WLM 会跳过它们：
+ 只读查询，例如 WLM 状态为 `running` 的 SELECT 语句。要了解查询的 WLM 状态，请查看 [STV\_WLM\_QUERY\_STATE](r_STV_WLM_QUERY_STATE.md) 系统表中的 STATE 列。
+ CREATE TABLE AS (CTAS) 语句。WLM 队列跳跃支持用户定义的和系统生成的 CTAS 语句。
+ SELECT INTO 语句。

不受 WLM 超时约束的查询将继续在原始队列中运行，直到完成为止。以下类型的查询不受 WLM 超时约束：
+ COPY 语句
+ 维护操作，例如 ALTER、ANALYZE 和 VACUUM
+ 只读查询，例如 WLM 状态达到 `returning` 的 SELECT 语句。要了解查询的 WLM 状态，请查看 [STV\_WLM\_QUERY\_STATE](r_STV_WLM_QUERY_STATE.md) 系统表中的 STATE 列。

没有资格因 WLM 超时跳过的查询将在超时时被取消。下列类型的查询没有资格因 WLM 超时跳过：
+ INSERT、UPDATE 和 DELETE 语句
+ UNLOAD 语句
+ 用户定义的函数 (UDF)

## WLM 超时重新分配和重新启动的查询
<a name="wlm-timeout-reassigned-and-restarted-queries"></a>

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

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

只有在满足以下所有条件时，才会重新分配查询：
+ 找到匹配的队列。
+ 新队列有足够多的空闲插槽来运行查询。如果 [wlm\_query\_slot\_count](r_wlm_query_slot_count.md) 参数设置为大于 1 的值，则查询可能需要多个插槽。
+ 新队列具有至少与查询当前使用的一样多的可用内存。

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

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

## QMR 跳过操作
<a name="qmr-hop-action-queue-hopping"></a>

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


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

要查明由 QMR 跳过的查询是否已重新分配、重新启动或取消，请查询 [STL\_WLM\_RULE\_ACTION](r_STL_WLM_RULE_ACTION.md) 系统日志表。

## QMR 跳过操作重新分配和重新启动的查询
<a name="qmr-hop-action-reassigned-and-restarted-queries"></a>

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

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

只有在满足以下所有条件时，才会重新分配查询：
+ 找到匹配的队列。
+ 新队列有足够多的空闲插槽来运行查询。如果 [wlm\_query\_slot\_count](r_wlm_query_slot_count.md) 参数设置为大于 1 的值，则查询可能需要多个插槽。
+ 新队列具有至少与查询当前使用的一样多的可用内存。

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

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