Workload Management - WLM

Redshift将用户的查询放到队列里等待处理,WLM决定怎么放入队列。

默认情况下,有两个队列:一个是superuser用的,一个是user用的。

不能更改superuser队列,并且一次只能处理一个查询。这个队列只用于troubleshooting。

user队列一次最多处理五个查询,但可以进行配置更改这个值。

推荐使用自动WLM

用户量一上来,许多用户可能同时运行查询。有的查询可能非常耗时,有的运行时间很短,这种情况下,运行时间短的查询要等待运行时间长的。WLM就是处理这种场景。

创建WLM

要自定义WLM,首先要创建一个新的参数组,在参数组里面配置WLM规则。

然后将新建的参数组应用到集群(可能需要重启)。

首先切到参数组界面,创建一个新的参数组:

image-20231017092424511

image-20231017092552815

默认是自动WLM模式,这里我们切换成手动WLM:

image-20231017092634599

image-20231017092656860

编辑工作负载队列

点击Edit workload queue:

image-20231017093134269

添加两个队列(加上默认队列有3个):

image-20231017093723624

这里添加了一个用户组和一个查询组:

  • 查询组可以在查询时直接指定查询跑在该组。
  • 用户组需要使用sql创建一个用户组,再把用户放到这个组里,则这个用户组所有查询都会跑在该组。

最后点击创建。创建完成后可以查看json规则:

image-20231017093855471

重启集群

将原来的参数组改成新创建的参数组:

image-20191129075130087

集群会应用更改,过一段时间后状态变为pending reboot。这时需要手动重启:

image-20191129075220282

重启成功后,可以看到3个队列:

image-20191129075625546

使用队列查询

上面创建了两种队列组:用户组和查询组。

首先使用查询组:

image-20191129080242022

使用用户组时,需要创建一个用户,再将用户放到用户组里。

这样用户的任何查询都会跑在用户组队列里:

image-20191129080452438

WLM属性

WLM有static 属性和Dynamic属性:

static:

  • User group和User group通配符。
  • Query group和Query group通配符。

Dynamic:

  • 并发量。
  • 每个队列使用内存百分比。
  • 超时时间

更改static WLM属性,需要重启集群。

更改dynamic WLM属性,不需要重启。

其他

  1. WLM有优先查询规则,(https://docs.aws.amazon.com/zh_cn/redshift/latest/dg/cm-c-wlm-queue-assignment-rules.html)。

    img

  2. 可以设置timeout,限制查询时间过长的查询。

  3. hopping:当某个列表的查询执行timeout后,可以配置规则,自动将其转到其他queue中继续处理。