飞鱼加速器官方网下载
  • 34

通过亚马逊 Redshift Serverless 实现 AI 驱动的伸缩和优化来优化您的工作负载

利用 Amazon Redshift Serverless 进行工作负载的优化与智能缩放

关键要点

AI 驱动的缩放与优化功能:Amazon Redshift Serverless 引入了一种新的功能,允许根据查询队列时间、数据量和查询复杂度进行智能缩放。用户友好的滑块设置:用户可以通过滑块选择成本优化、性能平衡或性能优化的设置,从而更好地控制工作负载的表现与费用。应用场景:Post 中介绍了三种使用场景,展示了如何利用 AI 驱动的缩放功能根据查询复杂度和数据量自动调整计算资源。

Amazon Redshift Serverless 的当前缩放方法根据查询队列时间增加计算能力,并在等待时间减少时缩减能力。然而,你可能需要根据查询复杂度和数据量自动调整计算资源,以实现不受查询队列影响的性能与价格目标。为了解决这一需求,Redshift Serverless 推出了 AI 驱动的缩放与优化 功能,该功能不仅在查询排队时进行调整,还考虑数据量和查询复杂度。

本文将介绍 Redshift Serverless 如何利用这一新的 AI 驱动的缩放与优化能力来满足常见的使用案例,并提供示例 SQL 语句,允许你在自己的 Redshift Serverless 数据仓库中体验这一功能的好处。

解决方案概述

在 Redshift Serverless 中,AI 驱动的缩放与优化功能 提供了一个用户友好的滑块,让你设定期望的费用与性能平衡。通过调整滑块,用户可以选择成本优化、性能平衡或性能优化的选项。根据滑块的位置,Amazon Redshift 将自动增加或减少资源,以确保更好的操作表现,并执行其他 AI 驱动的优化,如自动物化视图和自动表设计优化,以达到所选择的价格和性能目标。

选项描述成本优化优先考虑节约成本。当进行计算扩展时不会增加额外费用,且尽可能缩减计算资源。平衡推荐提供性能与成本之间的平衡。适度提高成本以实现更好的性能。性能优化优先考虑性能,积极扩展计算能力以实现最佳性能,可能导致更高的费用。

接下来的部分将说明 AI 驱动的缩放与优化功能如何智能预测工作负载的计算需求,并在以下三种场景中主动扩展:

用例 1:长时间运行的复杂查询,计算能力根据查询复杂度进行扩展。用例 2:突发的数据摄取量激增由 72 亿增加到 21 亿,计算能力根据数据量进行扩展。用例 3:数据湖查询扫描大型数据集TB 级,计算能力根据预计需要扫描的数据量进行扩展,预计扫描的数据量由机器学习模型基于历史记录统计预测。

在现有的自动缩放机制中,只有当实例中出现排队时,用例才会自动增加计算能力。

前置条件

要进行以下实验,请完成以下前置条件:

创建一个 Redshift Serverless 工作组。有关说明,请参阅 创建带命名空间的工作组。创建工作组时,选择 性能与成本控制,并设置 价格性能目标 滑块为 优化性能。有关更多信息,请参考 Amazon Redshift 引入新 AI 能力,包括 Amazon Q 以提高效率和生产力。设置一个 AWS 身份和访问管理IAM角色作为默认 IAM 角色。有关说明请参阅 使用控制台管理为集群创建的 IAM 角色。我们使用 TPCDS 1TB 云数据仓库基准数据来演示此功能。运行 SQL 语句 来创建表并加载 TPCDS 1TB 数据。

用例 1:根据查询复杂度缩放计算

以下查询将分析来自网站、批发和零售商等多个渠道的产品销售。这一复杂查询通常在默认的 128 RPUs 下运行大约需要 25 分钟。让我们在先前创建的工作组上运行此工作负载。

当第一次运行查询时,AI 缩放系统可能会因为系统尚未学习查询和数据特性而做出次优的资源分配决策。然而,系统将从这一经验中学习,当相同的查询再次运行时,它可以做出更优化的缩放决策。因此,如果查询在第一次运行时没有扩展,建议重新运行该查询。你可以在 Redshift Serverless 控制台 或通过查询 SYSSERVERLESSUSAGE 系统视图来监控使用的 RPU 能力。

在以下查询中禁用结果缓存,以避免从缓存中获取结果。

通过亚马逊 Redshift Serverless 实现 AI 驱动的伸缩和优化来优化您的工作负载

sqlSET enableresultcacheforsession TO offWITH / TPCDS 演示查询 /ws AS ( SELECT dyear AS wssoldyear wsitemsk wsbillcustomersk wscustomersk SUM(wsquantity) AS wsqty SUM(wswholesalecost) AS wswc SUM(wssalesprice) AS wssp FROM websales LEFT JOIN webreturns ON wrordernumber = wsordernumber AND wsitemsk = writemsk JOIN datedim ON wssolddatesk = ddatesk WHERE wrordernumber IS NULL GROUP BY dyear wsitemsk wsbillcustomersk)cs AS ( SELECT dyear AS cssoldyear csitemsk csbillcustomersk AS cscustomersk SUM(csquantity) AS csqty SUM(cswholesalecost) AS cswc SUM(cssalesprice) AS cssp FROM catalogsales LEFT JOIN catalogreturns ON crordernumber = csordernumber AND csitemsk = critemsk JOIN datedim ON cssolddatesk = ddatesk WHERE crordernumber IS NULL GROUP BY dyear csitemsk csbillcustomersk)ss AS ( SELECT dyear AS sssoldyear ssitemsk sscustomersk SUM(ssquantity) AS ssqty SUM(sswholesalecost) AS sswc SUM(sssalesprice) AS sssp FROM storesales LEFT JOIN storereturns ON srticketnumber = ssticketnumber AND ssitemsk = sritemsk JOIN datedim ON sssolddatesk = ddatesk WHERE srticketnumber IS NULL GROUP BY dyear ssitemsk sscustomersk) SELECT sscustomersk ROUND(ssqty / (COALESCE(wsqty csqty 1)) 2) AS ratio ssqty AS storeqty sswc AS storewholesalecost sssp AS storesalesprice COALESCE(wsqty 0) COALESCE(csqty 0) AS otherchanqty COALESCE(wswc 0) COALESCE(cswc 0) AS otherchanwholesalecost COALESCE(wssp 0) COALESCE(cssp 0) AS otherchansalespriceFROM ss LEFT JOIN ws ON (wssoldyear = sssoldyear AND wsitemsk = ssitemsk AND wscustomersk = sscustomersk)LEFT JOIN cs ON (cssoldyear = sssoldyear AND csitemsk = csitemsk AND cscustomersk = sscustomersk)WHERE COALESCE(wsqty 0) gt 0 AND COALESCE(csqty 0) gt 0 ORDER BY sscustomersk ssqty DESC sswc DESC sssp DESC otherchanqty otherchanwholesalecost otherchansalesprice ROUND(ssqty / (COALESCE(wsqty csqty 1)) 2)

查询完成后,运行以下 SQL 以捕获查询的开始和结束时间,这将在下一个查询中使用:

sqlSELECT queryid querytext starttime endtime elapsedtime / 10000000 AS durationinsecondsFROM sysqueryhistoryWHERE querytext LIKE TPCDS 演示查询 AND querytext NOT LIKE sysqueryhistoryORDER BY starttime DESC

让我们评估在前述 starttime 和 endtime 期间的计算扩展情况。在以下查询中替换 starttime 和 endtime 为前一个查询的输出:

sqlSELECT FROM sysserverlessusageWHERE endtime gt= starttime AND endtime lt= DATEADD(minute 1 endtime)ORDER BY endtime ASC

以下截图展示了示例输出。

可以注意到在此查询的持续过程中计算能力有所增加,这显示了 Redshift Serverless 如何根据查询复杂度进行扩展。

用例 2:根据数据量缩放计算

考虑 websales 摄取作业。在这个例子中,你的日常摄取作业处理 72 亿条记录,并在平均两分钟内完成。正如你在前面步骤中摄取的那样。

由于某些事件例如月末处理,你的摄取量增加了三倍,现在你的作业需要处理 21 亿条记录。在现有的缩放方法中,这将增加你的摄取作业的运行时间,除非等待时间足够长以触发额外的计算资源。然而,在性能优化模式下,通过 AI 驱动的缩放,Amazon Redshift 会自动扩展计算能力,以确保在通常的运行时间内完成摄取作业。这有助于保护你的摄取 SLA。

运行以下作业将 21 亿条记录摄取到 websales 表:

sqlCOPY websales FROM s3//redshiftdownloads/TPCDS/213/3TB/websales/ IAMROLE default GZIP DELIMITER EMPTYASNULL REGION useast1

运行以下 SQL 查询以比较摄取 21 亿条记录与 72 亿条记录的持续时间。尽管量增加了三倍,但两个摄取作业的完成时间大致相似。

sqlSELECT queryid tablename datasource loadedrows duration / 10000000 AS durationinseconds starttime endtimeFROM sysloadhistoryWHERE tablename = websalesORDER BY starttime DESC

运行以下查询,使用来自前面输出的开始时间和结束时间:

sqlSELECT FROM sysserverlessusageWHERE endtime gt= starttime AND endtime lt= DATEADD(minute 1 endtime)ORDER BY endtime ASC

以下是示例输出。你可以看到处理 21 亿条记录的摄取作业计算能力的增加。这表明 Redshift Serverless 如何根据数据量进行扩展。

飞鱼加速器官方网下载

用例 3:缩放数据湖查询

在这个用例中,你 创建外部表,指向 Amazon Simple Storage Service (Amazon S3) 中的 TPCDS 3TB 数据。然后你运行一个查询,扫描大量数据,以展示 Redshift Serverless 如何根据需要自动扩展计算能力。

在以下 SQL 中,请提供你在前置步骤中附加的默认 IAM 角色的 ARN:

sql 创建外部模式CREATE EXTERNAL SCHEMA exttpcds3tFROM DATA CATALOGDATABASE exttpcdsdbIAMROLE ltARN of the default IAM role attachedgtCREATE EXTERNAL DATABASE IF NOT EXISTS

通过运行以下 SQL 文件 中的 DDL 语句创建外部表。你应该会在查询编辑器中看到 exttpcds3t 模式下的七个外部表,如以下截图所示。

使用外部表运行以下查询。如第一个用例所述,如果查询在第一次运行时没有扩展,建议重新运行该查询,因为系统会从之前的经验中学习,并可以为后续运行提供更好的缩放和性能。

在以下查询中禁用结果缓存,以避免从缓存中获取结果。

sqlSET enableresultcacheforsession TO off

WITH / TPCDS 演示数据湖查询 /ws AS ( SELECT dyear AS wssoldyear wsitemsk wsbillcustomersk wscustomersk SUM(wsquantity) AS wsqty SUM(wswholesalecost) AS wswc SUM(wssalesprice) AS wssp FROM exttpcds3twebsales LEFT JOIN exttpcds3twebreturns ON wrordernumber = wsordernumber AND wsitemsk = writemsk JOIN exttpcds3tdatedim ON wssolddatesk = ddatesk WHERE wrordernumber IS NULL GROUP BY dyear wsitemsk wsbillcustomersk)cs AS ( SELECT dyear AS cssoldyear csitemsk csbillcustomersk AS cscustomersk SUM(csquantity) AS csqty SUM(cswholesalecost) AS cswc SUM(cssalesprice) AS cssp FROM exttpcds3tcatalogsales LEFT JOIN exttpcds3tcatalogreturns ON crordernumber = csordernumber AND csitemsk = critemsk JOIN exttpcds3tdatedim ON cssolddatesk = ddatesk WHERE crordernumber IS NULL GROUP BY dyear csitemsk csbillcustomersk)ss AS ( SELECT dyear AS sssoldyear ssitemsk sscustomersk SUM(ssquantity) AS ssqty SUM(sswholesalecost) AS sswc SUM(sssalesprice) AS sssp FROM exttpcds3tstoresales LEFT JOIN exttpcds3tstorereturns ON srticketnumber = ssticketnumber AND ssitemsk = sritemsk JOIN exttpcds3tdatedim ON sssolddatesk = ddatesk WHERE srticketnumber IS NULL GROUP BY dyear ssitemsk sscustomersk) SELECT sscustomersk ROUND(ssqty / (COALESCE(wsqty csqty 1)) 2) AS ratio ssqty AS storeqty sswc AS storewholesalecost sssp AS storesalesprice COALESCE(wsqty 0) COALESCE(csqty 0) AS otherchanqty COALESCE(wswc 0) COALESCE(cswc 0) AS otherchanwholesalecost COALESCE(wssp 0) COALESCE(cssp 0) AS otherchansalespriceFROM ss LEFT JOIN ws ON (wssoldyear = sssoldyear AND wsitemsk = ssitemsk AND wscustomersk = sscustomersk)LEFT JOIN cs ON (cssoldyear = sssoldyear AND csitemsk = csitemsk AND cscustomersk = sscustomersk)WHERE COALESCE(wsqty 0) gt 0 AND COALESCE(csqty 0) gt 0ORDER BY sscustomersk ssqty DESC sswc DESC sssp DESC otherchanqty otherchanwholesalecost otherchansalesprice ROUND(ssqty / (COALESCE(wsqty csqty 1)) 2)

检查查询的总耗时。你需要从结果中获取 starttime 和 endtime 用于下一条查询。

sqlSELECT queryid querytext starttime endtime elapsedtime / 10000000 AS durationinsecondsFROM sysqueryhistoryWHERE querytext LIKE TPCDS 演示数据湖查询 AND querytext NOT LIKE sysqueryhistoryORDER BY starttime DESC

运行以下查询以查看在前述 starttime 和 endtime 期间计算能力的缩放情况。在以下查询中,使用前一个查询的输出替换 starttime 和 endtime:

sqlSELECT FROM sysserverlessusageWHERE endtime gt= start