

 从补丁 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="cm-c-wlm-query-monitoring-rules"></a>

在 Amazon Redshift 工作负载管理 (WLM) 中，查询监控规则为 WLM 查询定义基于指标的性能界限，并指定在查询超出这些界限时需要采取的操作。例如，对于短时间运行查询专用的队列，您可创建取消运行超过 60 秒的查询的规则。要跟踪设计不佳的查询，您可创建记录包含嵌套循环的查询的其他规则。

您将在工作负载管理 (WLM) 配置中定义查询监控规则。您最多可以为每个队列定义 25 个规则，而且所有队列的限制为 25 个规则。每个规则最多包括三个条件 (即，谓词) 和一个操作。*谓词* 包含指标、比较条件（=、< 或 >）和值。如果满足任何规则的所有谓词，则会触发该规则的操作。可能的规则操作有 log、hop 和 abort，如以下所讨论的。

某个给定队列中的规则只能应用于在该队列中运行的查询。各个规则彼此独立。

WLM 每 10 秒评估一次指标。当查询被自动重写时，Amazon Redshift 会在子查询级别应用查询监控规则。如果在同一时段内触发了多条规则，WLM 会选择具有最严重操作的规则。如果两条规则的操作具有相同的严重性，WLM 会根据规则名称按字母顺序运行规则。如果操作为 hop 或 abort，则将记录操作且从队列中移出查询。如果操作为 log，则查询将继续在队列中运行。WLM 针对每个规则的每个查询仅启用一个 log 操作。如果队列中包含其他规则，这些规则将保持有效。如果操作为 hop 且将查询路由到其他队列，则将应用新队列的规则。有关对特定查询执行的查询监控和跟踪操作的更多信息，请参阅[短查询加速](wlm-short-query-acceleration.md)中的示例集。

当满足规则的所有谓词时，WLM 会在 [STL\$1WLM\$1RULE\$1ACTION](r_STL_WLM_RULE_ACTION.md) 系统表中写入一行。此外，Amazon Redshift 会将当前运行的查询的查询指标记录到 [STV\$1QUERY\$1METRICS](r_STV_QUERY_METRICS.md)。已完成的查询的指标存储在 [STL\$1QUERY\$1METRICS](r_STL_QUERY_METRICS.md) 中。

**注意**  
对于 Amazon Redshift Serverless，您可以使用 `wlm_json_configuration` 参数来配置查询队列和监控规则。这样，您就可以创建具有不同用户角色、查询组和监控规则的多个队列。有关配置无服务器查询队列的更多信息，请参阅《Amazon Redshift 管理指南》**中的[设置查询队列](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-workgroup-query-queues.html)。

## 定义查询监控规则
<a name="cm-c-wlm-defining-query-monitoring-rules"></a>

您创建作为您的 WLM 配置的一部分的查询监控规则，您可将该规则定义为您集群的参数组定义的一部分。

您可使用 AWS 管理控制台或以编程方式使用 JSON 来创建规则。

**注意**  
如果您选择以编程方式创建规则，强烈建议您使用控制台生成包含在参数组定义中的 JSON。有关更多信息，请参阅《Amazon Redshift 管理指南》**中的[创建查询监控规则](https://docs.aws.amazon.com/redshift/latest/mgmt/parameter-group-modify-qmr-console.html)和[使用 AWS CLI 配置参数值](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html#configure-parameters-using-the-cli)。

要定义查询监控规则，您要指定以下元素：
+ 一个规则名称 – 规则名称必须在 WLM 配置内是唯一的。规则名称最多可包含 32 个字母数字字符或下划线，且不能包含空格或引号。您可以让每个队列有最多 25 个规则，并且所有队列的总限制为 25 个规则。
+ 一个或多个谓词 – 您最多可以为每个规则设置三个谓词。如果满足任何规则的所有谓词，则会触发关联操作。谓词由指标名称、运算符（=、< 或 >）和值定义。示例是 `query_cpu_time > 100000`。有关指标列表以及不同指标值的示例，请参阅本部分中后面的[预置的 Amazon Redshift 的查询监控指标](#cm-c-wlm-query-monitoring-metrics)。
+ 操作 – 如果触发了多个操作，则 WLM 会选择具有最严重操作的规则。可能的操作 (按严重性的升序顺序) 包括：
  + Log – 记录有关 STL\$1WLM\$1RULE\$1ACTION 系统表中查询的信息。在您想要仅写入日志记录时使用 Log 操作。WLM 针对每个规则的每个查询最多创建一个日志。log 操作后，其他规则将保持有效且 WLM 将继续监控查询。
  + Hop（仅适用于手动 WLM）– 记录操作，并让查询跳到下一个匹配的队列中。如果没有其他匹配的队列，则会取消查询。QMR 仅跳过 [CREATE TABLE AS](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_AS.html) (CTAS )语句和只读查询，例如 SELECT 语句。有关更多信息，请参阅 [WLM 查询队列跳过](wlm-queue-hopping.md)。
  + 中止 – 记录操作并取消查询。QMR 不会停止 COPY 语句和维护操作，例如 ALTER、ANALYZE 和 VACUUM。
  + 更改优先级（仅适用于自动 WLM）– 更改查询的优先级。

要限制查询的运行时，我们建议您创建查询监控规则，而不是使用 WLM 超时。例如，您可以将 `max_execution_time` 设置为 50,000 毫秒，如以下 JSON 代码段所示。

```
"max_execution_time": 50000
```

但我们建议您定义一个等效的查询监控规则。下面的示例演示了将 `query_execution_time` 设置为 50 秒的查询监控规则：

```
"rules": 
[
    {
        "rule_name": "rule_query_execution",
        "predicate": [
            {
                "metric_name": "query_execution_time",
                "operator": ">",
                "value": 50
            }
        ],
        "action": "abort"
    }            
]
```

有关创建或修改查询监控规则的步骤，请参阅《Amazon Redshift 管理指南》**中的[创建查询监控规则](https://docs.aws.amazon.com/redshift/latest/mgmt/parameter-group-modify-qmr-console.html)和 [wlm\$1json\$1configuration 参数中的属性](https://docs.aws.amazon.com/redshift/latest/mgmt/workload-mgmt-config.html#wlm-json-config-properties)。

您可以在以下主题中找到有关查询监控规则的更多信息：
+  [预置的 Amazon Redshift 的查询监控指标](#cm-c-wlm-query-monitoring-metrics) 
+  [查询监控规则模板](#cm-c-wlm-query-monitoring-templates) 
+  [创建查询监控规则](https://docs.aws.amazon.com/redshift/latest/mgmt/parameter-group-modify-qmr-console.html) 
+  [配置工作负载管理](https://docs.aws.amazon.com/redshift/latest/mgmt/workload-mgmt-config.html) 
+  [查询监控规则的系统表和视图](#cm-c-wlm-qmr-tables-and-views) 

## 预置的 Amazon Redshift 的查询监控指标
<a name="cm-c-wlm-query-monitoring-metrics"></a>

下表描述了查询监控规则中使用的指标。(这些指标与存储在 [STV\$1QUERY\$1METRICS](r_STV_QUERY_METRICS.md) 和 [STL\$1QUERY\$1METRICS](r_STL_QUERY_METRICS.md) 系统表中的指标不同。) 

对于某个给定指标，将在查询级别或段级别跟踪性能阈值。有关段和步骤的更多信息，请参阅[查询计划和执行工作流程](c-query-planning.md)。

**注意**  
[WLM 超时](cm-c-defining-query-queues.md#wlm-timeout) 参数与查询监控规则不同。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/dg/cm-c-wlm-query-monitoring-rules.html)

**注意**  
`query_queue_time` 谓词不支持跳转操作。也就是说，在满足 `query_queue_time` 谓词时，将忽略定义了跳转的规则。
较短的段执行时间可能会导致某些指标（例如 `io_skew` 和 `query_cpu_usage_percent`）出现采样错误。为避免或减少采样错误，请在规则中包括段执行时间。`segment_execution_time > 10` 是一个好起点。

[SVL\$1QUERY\$1METRICS](r_SVL_QUERY_METRICS.md) 视图显示已完成查询的指标。[SVL\$1QUERY\$1METRICS\$1SUMMARY](r_SVL_QUERY_METRICS_SUMMARY.md) 视图显示已完成查询的指标的最大值。使用这些视图中的值帮助确定用于定义查询监控规则的阈值。

## 查询 Amazon Redshift Serverless 的监控指标
<a name="cm-c-wlm-query-monitoring-metrics-serverless"></a>

下表描述了为 Amazon Redshift Serverless 查询监控规则中使用的指标。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/dg/cm-c-wlm-query-monitoring-rules.html)

**注意**  
`max_query_queue_time` 谓词不支持跳转操作。也就是说，在满足 `max_query_queue_time` 谓词时，将忽略定义了跳转的规则。
较短的段执行时间可能会导致某些指标（例如 `max_io_skew` 和 `max_query_cpu_usage_percent`）出现采样错误。

对于 Amazon Redshift Serverless，您可以使用 `wlm_json_configuration` 参数来配置查询队列和监控规则。这样，您就可以使用上面所列的指标，创建具有不同用户角色、查询组和监控规则的多个队列。有关配置无服务器查询队列的更多信息，请参阅《Amazon Redshift 管理指南》**中的 [WLM JSON 配置结构](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-workgroup-query-queues.html#serverless-wlm-json-configuration)。

## 查询监控规则模板
<a name="cm-c-wlm-query-monitoring-templates"></a>

当您使用 Amazon Redshift 控制台添加规则时，可以选择从预定义的模板中创建规则。Amazon Redshift 将创建具有一组谓词的新规则，并使用默认值填充这些谓词。默认操作是 log。您可以修改这些谓词和操作以满足您的使用案例。

下表列出了可用的模板。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/dg/cm-c-wlm-query-monitoring-rules.html)

## 查询监控规则的系统表和视图
<a name="cm-c-wlm-qmr-tables-and-views"></a>

当满足规则的所有谓词时，WLM 会在 [STL\$1WLM\$1RULE\$1ACTION](r_STL_WLM_RULE_ACTION.md) 系统表中写入一行。此行包含规则所触发查询的详细信息以及所导致的操作。

此外，Amazon Redshift 还将查询指标记录到以下系统表和视图中。
+ [STV\$1QUERY\$1METRICS](r_STV_QUERY_METRICS.md) 表显示当前正在运行的查询的指标。
+ [STL\$1QUERY\$1METRICS](r_STL_QUERY_METRICS.md) 表记录已完成的查询的指标。
+ [SVL\$1QUERY\$1METRICS](r_SVL_QUERY_METRICS.md) 视图显示已完成查询的指标。
+ [SVL\$1QUERY\$1METRICS\$1SUMMARY](r_SVL_QUERY_METRICS_SUMMARY.md) 视图显示已完成查询的指标的最大值。