亚马逊AWS官方博客

Redshift性能调优 1 – 并发扩展(Concurrency-Scaling)

Amazon Redshift 作为云端数据仓库,凭借其强大的并行处理能力和分布式架构,能够有效支持高并发查询场景。同时,Redshift 提供并发扩展(Concurrency Scaling)功能以应对突发的查询负载激增的情况。该功能可以自动扩展计算资源,确保用户并发请求的性能稳定,特别适用于电商大促、财务月末报表生成等场景。当并发请求超过主集群处理能力时,系统会在数秒内创建临时扩展集群处理额外负载,并在需求下降后自动释放资源,此过程无需人工干预。

本篇博客将着重介绍该功能的开启方法,计价模式,监控方法等。

为特定工作负载开启&关闭并发扩展(Concurrency Scaling)功能

通过选择为特定的WLM队列开启并发扩展功能,来控制哪些用户请求/工作负载是可以被发送至并发扩展集群。

首先,在开启并发扩展之前,请借助WLMQueueLength指标来找到队列最长的WLM队列:CloudWatch -> Redshift -> ClusterIdentifier, QueueName -> MLMQueueLength

比如在下面的示例中,ETL队列的WLMQueueLength 指标最大,因此该ETL队列是开启并发扩展功能的首要选择。

具体的开启方法:

Amazon Redshift console -> Configurations -> Workload management,找到该队列,将Concurrency scaling mode设置成auto(默认是off)。

以上操作就完成为ETL队列开启并发扩展功能。

监控并发扩展(Concurrency Scaling)事件

当上述的ETL队列出现了队列增加的情况时,并发扩展功能会被自动触发,符合条件的请求将被自动路由到并发扩展集群执行,而无需在主集群队列中等待。

注意:

  • 并发扩展功能支持以下操作:数据操作语句,包括 `COPY`、`INSERT`、`DELETE`、`UPDATE` 、 `CREATE TABLE AS` (CTAS),以及手动刷新物化视图(MVs) ;
  • 并发扩展功能不支持以下操作:其他数据操作语言(DML)语句和数据定义语言(DDL)语句。

监控扩展集群的扩展事件,在Amazon Redshift console,选择目标集群,点击“查询监控(Query monitoring)“标签页,选择”工作负载并发(Workload concurrency)“选项。

也可以通过CloudWatch -> Redshift -> Aggregated by Cluster -> ConcurrencyScalingActiveClusters指标来监控。

请注意以下具体的指标说明:

  • ConcurrencyScalingActiveClusters:正在运行的并发扩展集群。如果该指标的值小于1(例如5),可能是CloudWatch中指标的聚合方式导致的。例如,如果查询的时间范围内扩展集群并非全程活跃,计算平均值时可能会出现小数(比如:在5分钟内,扩展集群运行了2.5分钟,该指标的平均值就是0.5)。
  • MaxConfiguredConcurrencyScalingClusters:该集群配置允许的醉倒并发扩展集群数量,即系统允许同时允许的Concurrency Scaling集群的上限值,默认值是1。

可以在Amazon Redshift console -> Configurations -> Workload management 页面上查看和修改参数max_concurrency_scaling_clusters 的值。

该ETL队列的WLMQueueLength指标在并发扩展功能被开启之后有大幅下降。

监控和控制并发扩展(Concurrency Scaling)成本

主集群每运行24小时便会累积1小时的并发扩展集群免费额度(每天最多可获得1小时的免费额度,且相关额度需先完成累积后才能被同一集群使用)。超出免费额度后,系统将按秒计费(仅当并发扩展集群实际处理查询时收费),每秒的按需费率取决于主集群的节点类型和数量。

每日1小时免费额度:

例如,以下的示例中并发扩展的总时长是40分钟(1小时),因此未额外收费。

在Amazon Cost Explorer中也可以确认未额外收费(CNN1-CSFreeUsage:ra3.4xlarge)。

超出免费额度时按秒计费:

当并发扩展的总时长超过免费额度的时候,则将按照主集群每小时费用计算出每秒的费用,乘以超出免费并发扩展额度的时长,再乘以扩展集群的数量。

具体的扩展集群的计费可以在Amazon Cost Explorer中查看:

配置使用上限:

在Amazon Redshift集群层面上,可以配置Concurrency Scaling Usage Limit的来监控、控制费用。

在 Amazon Redshift 控制台上,进行以下操作:

1.选择所需调整的Redshift集群;
2.从 “操作”(Actions)下拉菜单中,选择 “管理使用限制”(Manage usage limit);

3.要为并发扩展配置使用限制,在 “并发扩展使用限制”(Concurrency scaling usage limit)中选择 “配置使用限制”(Configure usage limit)。
4.从Time period 下拉菜单中选择时间周期(每日、每周或每月)。
5.在Usage limit (hh:mm)中配置期望的使用限制值(例如,如果不想为此功能额外付费,可以设置该值为1)。
6.在Action下拉菜单中,选择要执行的操作(Alert – 发生警报、Log to system table – 记录到系统表或者Disable feature – 禁用该功能)。

注意事项

该并发扩展也有一定的使用限制,除了上述提到的不支持数据定义语言(DDL)语句以外,也有其他的受限情况。具体的内容请参见该Concurrency scaling官方文档。

如果已经为特定队列开启了并发扩展功能,但是此队列中的语句的执行性能依然未提升,那么请检查该队列中的请求是否未被并发扩展功能所支持。

可以通过以下脚本来检查scaling status (status = 1 代表语句成功运行在扩展集群上):

select concurrency_scaling_status, count(*) 
from stl_query 
where userid >= 1 
group by 1 order by 2 desc;

以上脚本执行结果如下:

在上述的示例中,成功运行在扩展集群上的语句仅有268条。绝大部分的语句未被并发扩展支持。如果您遇到类似的情况,请提供该语句的运行结果,联系Support 团队来做具体的检查。

结束语

本篇博客介绍了并发扩展(Concurrency Scaling)的概述信息,包括如何开启、监控、定价、和使用的注意事性。请您结合具体的场景和需求,合理的配置和使用该功能以获得更好的性能体验。

参考链接

https://docs.aws.amazon.com/redshift/latest/dg/concurrency-scaling.html

https://aws.amazon.com/blogs/big-data/manage-and-control-your-cost-with-amazon-redshift-concurrency-scaling-and-spectrum/

https://www.amazonaws.cn/en/redshift/pricing/

*前述特定亚马逊云科技生成式人工智能相关的服务目前在亚马逊云科技海外区域可用。亚马逊云科技中国区域相关云服务由西云数据和光环新网运营,具体信息以中国区域官网为准。

本篇作者

宋运春

西云数据技术客户经理,负责企业级客户的架构、运维治理与优化、技术支持等工作,拥有多年丰富的解决客户实际问题的经验。