其他分享
首页 > 其他分享> > Redshift Work Load Management(WLM)

Redshift Work Load Management(WLM)

作者:互联网

Redshift Work Load Management(WLM)

Amazon Redshift 工作负载管理 (WLM) 使用户能够灵活地管理工作负载中的优先级,这样短期、快速运行的查询就不会卡在长时间运行的查询后面的队列中。
基本上,当我们创建一个 redshift 集群时,它附加了默认的 WLM 配置。 在默认配置中,有两个队列。 第一个是并发为 1 的超级用户,第二个队列是并发为 5 的其他用户的默认队列。这意味着用户可以并行运行多达 5 个查询。 因此,例如,如果此队列有 5 个长时间运行的查询,则短查询将不得不等待这些查询完成。 为了解决这个问题,我们使用 WLM 以便我们可以为短查询和长查询创建单独的队列。 WLM 还允许我们在队列之间划分集群的整体内存。

Redshift Parameter Group

在 Amazon Redshift 中,您将参数组与您创建的每个集群相关联。 参数组是一组适用于您在集群中创建的所有数据库的参数。 这些参数配置数据库设置,例如查询超时和日期样式。 WLM 是参数组配置的一部分。

Defining Query Queues

当用户在 Amazon Redshift 中运行查询时,查询将路由到查询队列。 每个查询队列包含多个查询槽。 每个队列都分配了集群可用内存的一部分。 队列的内存在队列的查询槽之间分配。 您可以为每个查询队列配置 WLM 属性,以指定在插槽之间分配内存的方式、如何在运行时将查询路由到特定队列以及何时取消长时间运行的查询。 您还可以使用与 WLM 属性分开的 wlm_query_slot_count 参数,通过分配多个插槽来临时启用查询以使用更多内存。

默认情况下,Amazon Redshift 配置以下查询队列:

您可以向默认 WLM 配置添加额外的查询队列,最多总共有八个用户队列。 您可以为每个查询队列配置以下内容:

队列中的查询并发运行,直到它们达到为该队列定义的 WLM 查询槽计数或并发级别。 随后的查询然后在队列中等待。
每个队列最多可以配置 50 个查询槽。 所有用户定义队列的最大 WLM 查询槽数为 50。该限制包括默认队列,但不包括保留的超级用户队列。
注意:WLM 并发级别不同于可以建立到集群的并发用户连接数。 最大并发用户连接数为 500。

以逗号分隔的用户组名称列表。 当用户组的成员在数据库中运行查询时,他们的查询将路由到与其用户组关联的队列。

以逗号分隔的查询组列表。 当查询组的成员在数据库中运行查询时,他们的查询将路由到与其查询组关联的队列。

分配给队列的内存百分比。 如果为至少一个队列指定内存百分比,则必须为所有其他队列指定一个百分比,最多为 100%。 如果所有队列中的内存分配低于 100%,则未分配的内存由服务管理。 该服务可以暂时将此未分配的内存分配给请求额外内存进行处理的队列。

WLM 超时不适用于已达到返回状态的查询。 要查看查询的状态,请参阅 STV_WLM_QUERY_STATE 系统表。 COPY 语句和维护操作(例如 ANALYZE 和 VACUUM)不受 WLM 超时的影响。
WLM 超时的功能类似于 statement_timeout 配置参数,不同之处在于,statement_timeout 配置参数适用于整个集群,WLM 超时特定于 WLM 配置中的单个队列。
如果还指定了 statement_timeout,则使用 statement_timeout 和 WLM 超时 (max_execution_time) 中的较低者。

由于 WLM 超时或查询监控规则 (QMR) 跳跃操作,查询可能会被跳跃。
当查询被跳跃时,WLM 会尝试根据 WLM 队列分配规则将查询路由到下一个匹配的队列。 如果查询与任何其他队列定义不匹配,则取消查询。 它没有分配给默认队列。
下表总结了具有 WLM 超时的不同类型查询的行为。

Query TypeAction
Insert, Update, DeleteCancel
UDFCancel
UNLOADCancel
CopyContinue execution
maintenance operationsContinue execution
Read-only query in a returning stateContinue execution
Read-only query in a running stateReassign or restart
CREATE TABLE AS(CTAS),SELECT INTOReassign or restart

查询监控规则为 WLM 队列定义基于指标的性能边界,并指定当查询超出这些边界时要采取的操作。

https://docs.aws.amazon.com/redshift/latest/dg/cm-c-wlm-query-monitoring-rules.html

Modifying the WLM Configuration

更改 WLM 配置后,您可能需要重新启动集群。

Short Query Acceleration

短查询加速 (SQA) 将选定的短时间查询优先于长时间运行的查询。 SQA 在专用空间中执行短期运行的查询,因此 SQA 查询不会被迫在较长查询之后的队列中等待。 SQA 仅优先考虑短期运行且位于用户定义队列中的查询。CREATE TABLE AS (CTAS) 语句和只读查询(例如 SELECT 语句)符合 SQA 的条件。
SQA 在默认参数组和所有新参数组中默认启用。 要在 Amazon Redshift 控制台中禁用 SQA,请编辑参数组的 WLM 配置并取消选择启用短查询加速。
当您启用 SQA 时,所有用户定义的队列中的 WLM 查询槽总数或并发总数必须为 15 或更少。 如果您使用 AWS CLI 或 Amazon Redshift API 启用 SQA,则不会强制执行插槽计数限制。

Monitoring SQA

To check whether SQA is enabled, run the following query. If the query returns a row, then SQA is enabled.
select * from stv_wlm_service_class_config
where service_class = 14;

**WLM Queue Assignment Rules

  1. 如果用户以超级用户身份登录并在标记为超级用户的查询组中运行查询,则该查询将分配到超级用户队列。
  2. 如果用户属于列出的用户组,或者用户在列出的查询组内运行查询,则该查询将分配到第一个匹配队列。
  3. 如果查询不满足任何条件,则该查询将分配给默认队列,即 WLM 配置中定义的最后一个队列。

https://docs.aws.amazon.com/redshift/latest/dg/cm-c-wlm-queue-assignment-rules.html

Assigning Queries to Queues

https://docs.aws.amazon.com/redshift/latest/dg/cm-c-executing-queries.html

WLM Dynamic and Static Configuration Properties

WLM 配置属性要么是动态的,要么是静态的。 如果您更改了任何动态属性,则无需重新启动集群以使更改生效。 在应用动态更改时,您的集群状态正在修改。 如果添加或删除查询队列或更改任何静态属性,则必须在任何 WLM 参数更改(包括对动态属性的更改)生效之前重新启动集群。

The following WLM properties are static:
● User groups
● User group wildcard
● Query groups
● Query group wildcard
The following WLM properties are dynamic:
● Concurrency
● Percent of memory to use
● Timeout

如果更改超时值,则新值将应用于更改该值后开始执行的任何查询。 如果要使用的并发性或内存百分比发生更改,Amazon Redshift 会动态转换到新配置,以便当前运行的查询不受更改的影响。

WLM Query Monitoring Rules

https://docs.aws.amazon.com/redshift/latest/dg/cm-c-wlm-query-monitoring-rules.html

Reference

https://medium.com/@bilal.zahid11786/aws-redshift-wlm-work-load-management-11b635036ac7

标签:Load,Management,队列,Work,用户,默认,查询,WLM,SQA
来源: https://blog.csdn.net/chg1226/article/details/122341136