Amazon Redshift
数据库开发人员指南 (API 版本 2012-12-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

短查询加速

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

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

CREATE TABLE AS (CTAS) 语句和只读查询 (例如 SELECT 语句) 符合 SQA 资格。

Amazon Redshift 使用机器学习算法分析每个有资格的查询,并预测查询的执行时间。默认情况下,WLM 根据集群的工作负载分析为 SQA 最大运行时动态分配值。或者,您也可以指定一个介于 1 和 20 秒之间的固定值。–在某些情况下,查询的预测运行时可能小于定义的 SQA 最大运行时间,而且查询将因此需要在队列中等待。在这些情况下,SQA 将查询与 WLM 队列分开,并将其排定为优先执行。如果查询运行的时间长于 SQA 最大运行时间,WLM 会根据 WLM 队列分配规则将查询移动到第一个匹配 WLM 队列。随着时间的推移,预测会随着 SQA 从您的查询模式中学习而提高。

默认情况下会对所有新集群启用 SQA。要在 Amazon Redshift 控制台中禁用 SQA,请编辑参数组的 WLM 配置并取消选择 Enable short query acceleration (启用短查询加速)。当您启用 SQA 时,您的总 WLM 查询插槽计数或并发度在所有用户定义的队列之间必须是 15 或更少。如果您使用 AWS CLI 或 Amazon Redshift API 启用 SQA,则不强制执行插槽计数限制。作为最佳实践,我们建议您使用 WLM 查询插槽计数 15 或更少,以保持最佳整体系统性能。有关修改 WLM 配置的信息,请参阅 Amazon Redshift Cluster Management Guide 中的配置工作负载管理

短查询的最大运行时间

当您启用 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

要检查是否启用了 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;