

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

# 工作负载管理
<a name="cm-c-implementing-workload-management"></a>

您可以配置 Amazon Redshift WLM 以通过自动 WLM 或手动 WLM 运行。

借助 Amazon Redshift，您可以管理并发查询和用户工作负载并确定其优先级，以优化性能和资源利用率。工作负载管理（WLM）允许您定义队列、用户组和其它结构，以控制分配给不同类型查询或用户的资源。

以下各节将概述 Amazon Redshift 中特定的工作负载管理功能，并将指导您进行配置和监控。

**自动 WLM**

为了最大限度地提高系统吞吐量和高效地使用资源，您可以启用 Amazon Redshift 来管理如何划分资源以使用自动 WLM 运行并行查询。*自动 WLM* 管理运行查询所需的资源。Amazon Redshift 确定有多少个查询并发运行以及向每个分派的查询分配多少内存。当您希望 Amazon Redshift 管理如何划分资源以运行并发查询时，请使用自动 WLM。有关更多信息，请参阅 [实施自动 WLM](automatic-wlm.md)。

 

使用并发扩展和自动 WLM，您可以支持几乎无限的并发用户和并发查询，同时提供始终如一的快速查询性能。有关更多信息，请参阅 [并发扩展](concurrency-scaling.md)。

**注意**  
在大多数情况下，我们建议您使用自动 WLM。如果您使用手动 WLM，并且希望迁移到自动 WLM，请参阅[从手动 WLM 迁移到自动 WLM](#wlm-manual-to-automatic)。

使用自动 WLM 可以为队列中的工作负载定义查询优先级。有关查询优先级的更多信息，请参阅[查询优先级](query-priority.md)。

**手动 WLM**

您可能有多个会话或用户同时运行查询。一些查询可能会长时间占用集群资源，从而影响其他查询的性能。手动 WLM 有助于针对特殊应用场景管理这种情况。如果您想对并发性进行更多控制，请使用手动 WLM。

您可以修改 WLM 配置，为耗时查询和短时查询分别创建队列，来管理系统性能。在运行时，您可以根据用户组或查询组将查询路由到这些队列。

您可以设置规则以根据运行查询的用户或指定的标签将查询路由到特定的队列。您还可以配置分配到每个队列的内存量，使大型查询在内存更多的队列中运行。您还可以配置查询监控规则 (QMR) 来限制长时间运行的查询。有关更多信息，请参阅 [实施手动 WLM](cm-c-defining-query-queues.md)。

**注意**  
我们建议您为手动 WLM 查询队列配置不超过 15 个查询槽。有关更多信息，请参阅 [并发级别](cm-c-defining-query-queues.md#cm-c-defining-query-queues-concurrency-level)。

请注意，对于手动 WLM 配置，您可以分配给队列的最大插槽数为 50。但是，这并不意味着在自动 WLM 配置中，Amazon Redshift 集群总是会同时运行 50 个查询。根据集群上的内存需求或其他类型的资源分配，这一数字会发生改变。

**Topics**
+ [切换 WLM 模式](#cm-c-switching-mode)
+ [修改 WLM 配置](#cm-c-modifying-wlm-configuration)
+ [实施自动 WLM](automatic-wlm.md)
+ [实施手动 WLM](cm-c-defining-query-queues.md)
+ [并发扩展](concurrency-scaling.md)
+ [短查询加速](wlm-short-query-acceleration.md)
+ [WLM 队列分配规则](cm-c-wlm-queue-assignment-rules.md)
+ [为队列分配查询](cm-c-executing-queries.md)
+ [WLM 动态和静态配置属性](cm-c-wlm-dynamic-properties.md)
+ [WLM 查询监控规则](cm-c-wlm-query-monitoring-rules.md)
+ [WLM 系统表和视图](cm-c-wlm-system-tables-and-views.md)

## 切换 WLM 模式
<a name="cm-c-switching-mode"></a>

您可以使用 Amazon Redshift 控制台来启用自动或手动 WLM：

1. 选择 **Switch WLM mode**（切换 WLM 模式）。

1. 要将其设置为自动 WLM，请选择**自动 WLM**。使用此选项，最多八个队列用于管理查询，并且**内存**和**主要并发**字段均设置为**自动**。此外，默认的查询优先级设置为**正常**。

1. 要使用 Amazon Redshift 控制台启用手动配置，请切换到**手动 WLM**。使用此选项，您可以指定用于管理查询的队列，以及**内存**和**主要并发**字段值。使用手动配置，您可以配置多达八个查询队列，并设置可在每个队列中同时运行的查询数。

## 修改 WLM 配置
<a name="cm-c-modifying-wlm-configuration"></a>

修改 WLM 配置的最简单方法是使用 Amazon Redshift 控制台。您也可以使用 Amazon CLI 或 Amazon Redshift API。

在自动和手动 WLM 之间切换集群时，集群将进入 `pending reboot` 状态。在下次集群重新启动之前，更改不会生效。

有关修改 WLM 配置的详细信息，请参阅《Amazon Redshift 管理指南》**中的[配置工作负载管理](https://docs.amazonaws.cn/redshift/latest/mgmt/workload-mgmt-config.html)。

### 从手动 WLM 迁移到自动 WLM
<a name="wlm-manual-to-automatic"></a>

为了最大限度地提高系统吞吐量和高效地使用资源，我们建议您为队列设置自动 WLM。考虑采用以下方法设置从手动 WLM 到自动 WLM 的平滑过渡。

要从手动 WLM 迁移到自动 WLM 并使用查询优先级，我们建议您创建新参数组，然后将该参数组附加到集群。有关更多信息，请参阅《Amazon Redshift 管理指南》**中的 [Amazon Redshift 参数组](https://docs.amazonaws.cn/redshift/latest/mgmt/working-with-parameter-groups.html)。

**重要**  
要更改参数组或从手动切换到自动 WLM，需要重新启动集群。有关更多信息，请参阅 [WLM 动态和静态配置属性](cm-c-wlm-dynamic-properties.md)。

我们举一个例子，其中有三个手动 WLM 队列。每个队列分别对应于 ETL 工作负载、分析工作负载和数据科学工作负载。ETL 工作负载每 6 小时运行一次，分析工作负载全天运行，而数据科学工作负载可能随时激增。使用手动 WLM，您可以根据您对每个工作负载对业务重要性的理解来指定每个工作负载队列所获得的内存和并发性。指定内存和并发性不仅难以弄清楚，而且还会导致对集群资源静态分区，使得只有一部分工作负载在运行，造成了资源浪费。

您可以将自动 WLM 与查询优先级一起使用，以指示工作负载的相对优先级，从而避免前面的问题。对于此示例，请执行以下步骤：
+ 创建一个新参数组并切换到**自动 WLM**模式。
+ 为三个工作负载中的每一个添加队列：ETL 工作负载、分析工作负载和数据科学工作负载。为与**手动 WLM** 模式一起使用的每个工作负载使用相同的用户组。
+ 将 ETL 工作负载的优先级设置为 `High`，将分析工作负载的优先级设置为 `Normal`，并将数据科学工作负载的优先级设置为 `Low`。这些优先级反映不同工作负载或用户组的业务优先级。
+ （可选）为分析或数据科学队列启用并发扩展，以便即使 ETL 工作负载每 6 小时运行一次，这些队列中的查询也能获得一致的性能。

使用查询优先级，当只有分析工作负载在集群上运行时，它会获取整个系统的资源来运行。这样可以在更好的系统利用率下实现高吞吐量。但是，当 ETL 工作负载启动时，它会获得先行权，因为它具有更高的优先级。除了在被接纳之后的优先资源分配之外，作为 ETL 工作负载的一部分运行的查询在被接纳期间也会获得优先级。因此，无论系统上运行的是什么其他内容，ETL 工作负载都可以按预测的方式执行。高优先级工作负载的可预测性能是以其他较低优先级工作负载为代价的，这些工作负载运行时间更长，因为它们的查询在等待更重要的查询完成。或者，因为当它们与更高优先级的查询同时运行时，它们获得的资源比例较小。Amazon Redshift 使用的调度算法有助于让较低优先级的查询不会遇到没有资源的情况，而是继续执行，尽管速度较慢。

**注意**  
超时字段在自动 WLM 中不可用。请改用 QMR 规则 `query_execution_time`。有关更多信息，请参阅 [WLM 查询监控规则](cm-c-wlm-query-monitoring-rules.md)。
QMR 操作 HOP 不适用于自动 WLM。请改用 `change priority` 操作。有关更多信息，请参阅 [WLM 查询监控规则](cm-c-wlm-query-monitoring-rules.md)。
集群使用自动 WLM 和手动 WLM 队列的方式不同，这可能会导致混淆配置。例如，您可以在自动 WLM 队列中配置优先级属性，但不能在手动 WLM 队列中配置该属性。因此，在一个参数组中，应避免混用自动 WLM 队列和手动 WLM 队列。而是在迁移到自动 WLM 时创建新参数组。