使用短查询加速
短查询加速 (SQA) 让选定的短时查询优先于长时查询。SQA 在专用空间中运行短时查询,因此 SQA 查询不会被迫排在队列中的长时查询后面等待。SQA 仅优先处理用户定义的队列中的短时查询。使用 SQA,短时查询会更快地开始运行,用户会更快地看到结果。
如果您启用 SQA,则可以减少专用于运行短查询的工作负载管理 (WLM) 队列。此外,长时查询无需与短查询竞争队列中的插槽,因此您可以将 WLM 队列配置为使用较少的查询插槽。当您使用较低的并发度时,查询吞吐量会增加,而且大多数工作负载的总体系统性能会得到提高。
CREATE TABLE AS (CTAS) 语句和只读查询 (例如 SELECT 语句) 符合 SQA 资格。
Amazon Redshift 使用机器学习算法分析每个有资格的查询,并预测查询的执行时间。默认情况下,WLM 根据集群的工作负载分析为 SQA 最大运行时动态分配值。或者,您也可以指定一个介于 1-20 秒之间的固定值。如果预测的查询运行时间小于定义或动态分配的 SQA 最大运行时间,并且查询在 WLM 队列中等待,则 SQA 会将查询与 WLM 队列分开并安排优先执行。如果查询运行的时间长于 SQA 最大运行时间,WLM 会根据 WLM 队列分配规则将查询移动到第一个匹配 WLM 队列。随着时间的推移,预测会随着 SQA 从您的查询模式中学习而提高。
默认情况下,为默认参数组和所有新参数组启用 SQA。要在 Amazon Redshift 控制台中禁用 SQA,请编辑参数组的 WLM 配置并取消选择启用短查询加速。作为最佳实践,我们建议您使用 WLM 查询插槽计数 15 或更少,以保持最佳整体系统性能。有关修改 WLM 配置的信息,请参阅《Amazon Redshift 管理指南》中的配置工作负载管理。
短查询的最大运行时间
当您启用 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;
有关已移出的查询的更多信息,更笼统地说,有关可以对查询采取的基于规则的操作的更多信息,请参阅WLM 查询监控规则。