Redshift将用户的查询放到队列里等待处理,WLM决定怎么放入队列。
默认情况下,有两个队列:一个是superuser用的,一个是user用的。
不能更改superuser队列,并且一次只能处理一个查询。这个队列只用于troubleshooting。
user队列一次最多处理五个查询,但可以进行配置更改这个值。
推荐使用自动WLM
。
用户量一上来,许多用户可能同时运行查询。有的查询可能非常耗时,有的运行时间很短,这种情况下,运行时间短的查询要等待运行时间长的。WLM就是处理这种场景。
要自定义WLM,首先要创建一个新的参数组,在参数组里面配置WLM规则。
然后将新建的参数组应用到集群(可能需要重启)。
首先切到参数组界面,创建一个新的参数组:
默认是自动WLM模式,这里我们切换成手动WLM:
点击Edit workload queue
:
添加两个队列(加上默认队列有3个):
这里添加了一个用户组和一个查询组:
最后点击创建。创建完成后可以查看json规则:
将原来的参数组改成新创建的参数组:
集群会应用更改,过一段时间后状态变为pending reboot
。这时需要手动重启:
重启成功后,可以看到3个队列:
上面创建了两种队列组:用户组和查询组。
首先使用查询组:
使用用户组时,需要创建一个用户,再将用户放到用户组里。
这样用户的任何查询都会跑在用户组队列里:
WLM有static 属性和Dynamic属性:
static:
Dynamic:
更改static WLM属性,需要重启集群。
更改dynamic WLM属性,不需要重启。
WLM有优先查询规则,(https://docs.aws.amazon.com/zh_cn/redshift/latest/dg/cm-c-wlm-queue-assignment-rules.html)。
可以设置timeout,限制查询时间过长的查询。
hopping:当某个列表的查询执行timeout后,可以配置规则,自动将其转到其他queue中继续处理。