

 从补丁 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/)。

# 短查询加速
<a name="wlm-short-query-acceleration"></a>

短查询加速 (SQA) 让选定的短时查询优先于长时查询。SQA 在专用空间中运行短时查询，因此 SQA 查询不会被迫排在队列中的长时查询后面等待。SQA 仅优先处理用户定义的队列中的短时查询。使用 SQA，短时查询会更快地开始运行，用户会更快地看到结果。

如果您启用 SQA，则可以减少专用于运行短查询的工作负载管理 (WLM) 队列。此外，长时查询无需与短查询竞争队列中的插槽，因此您可以将 WLM 队列配置为使用较少的查询插槽。当您使用较低的并发度时，查询吞吐量会增加，而且大多数工作负载的总体系统性能会得到提高。

 [CREATE TABLE AS](r_CREATE_TABLE_AS.md) (CTAS) 语句和只读查询 (例如 [SELECT](r_SELECT_synopsis.md) 语句) 符合 SQA 资格。

Amazon Redshift 使用机器学习算法分析每个有资格的查询，并预测查询的执行时间。默认情况下，WLM 根据集群的工作负载分析为 SQA 最大运行时动态分配值。或者，您也可以指定一个介于 1-20 秒之间的固定值。如果预测的查询运行时间小于定义或动态分配的 SQA 最大运行时间，并且查询在 WLM 队列中等待，则 SQA 会将查询与 WLM 队列分开并安排优先执行。如果查询运行的时间长于 SQA 最大运行时间，WLM 会根据 [WLM 队列分配规则](cm-c-wlm-queue-assignment-rules.md)将查询移动到第一个匹配 WLM 队列。随着时间的推移，预测会随着 SQA 从您的查询模式中学习而提高。

默认情况下，为默认参数组和所有新参数组启用 SQA。要在 Amazon Redshift 控制台中禁用 SQA，请编辑参数组的 WLM 配置并取消选择**启用短查询加速**。作为最佳实践，我们建议您使用 WLM 查询插槽计数 15 或更少，以保持最佳整体系统性能。有关修改 WLM 配置的信息，请参阅《Amazon Redshift 管理指南》**中的[配置工作负载管理](https://docs.aws.amazon.com/redshift/latest/mgmt/workload-mgmt-config.html)。

## 短查询的最大运行时间
<a name="wlm-sqa-max-run-time"></a>

当您启用 SQA 时，默认情况下 WLM 会将短查询的最大运行时间设置为动态的。我们建议保留 SQA 最大运行时间的动态设置。您可以通过指定一个介于 1-20 秒之间的固定值来覆盖默认设置。

在某些情况下，您可能会考虑对 SQA 最大运行时间值使用不同的值，以提高系统性能。在这些情况下，可分析您的工作负载以查找您的大部分短时查询的最大执行时间。以下查询返回位于大约第七十个百分位数的查询的最大运行时间。

```
select least(greatest(percentile_cont(0.7) 
within group (order by total_exec_time / 1000000) + 2, 2), 20) 
from stl_wlm_query 
where userid >= 100
and final_state = 'Completed';
```

在确定适合您的工作负载的最大运行时间值后，不需要更改它，除非工作负载发生重大变化。

## 监控 SQA
<a name="wlm-monitoring-sqa"></a>

要检查是否启用了 SQA，请运行以下查询。如果查询返回一行内容，则说明 SQA 已启用。

```
select * from stv_wlm_service_class_config 
where service_class = 14;
```

以下查询显示遍历每个查询队列（服务类）的查询数量。它还显示平均执行时间、等待时间排在第九十百分位数的查询数量以及平均等待时间。SQA 查询使用服务类 14。

```
select final_state, service_class, count(*), avg(total_exec_time), 
percentile_cont(0.9) within group (order by total_queue_time), avg(total_queue_time) 
from stl_wlm_query where userid >= 100 group by 1,2 order by 2,1;
```

要查明哪些查询由 SQA 选取并成功完成，请运行以下查询。

```
select a.queue_start_time, a.total_exec_time, label, trim(querytxt) 
from stl_wlm_query a, stl_query b 
where a.query = b.query and a.service_class = 14 and a.final_state = 'Completed' 
order by b.query desc limit 5;
```

要查找由 SQA 选取但超时的查询，请运行以下查询。

```
select a.queue_start_time, a.total_exec_time, label, trim(querytxt) 
from stl_wlm_query a, stl_query b 
where a.query = b.query and a.service_class = 14 and a.final_state = 'Evicted' 
order by b.query desc limit 5;
```

有关已移出的查询的更多信息，更笼统地说，有关可以对查询采取的基于规则的操作的更多信息，请参阅[WLM 查询监控规则](cm-c-wlm-query-monitoring-rules.md)。