为队列分配查询 - Amazon Redshift

为队列分配查询

使用 Amazon Redshift,您可以管理工作负载并发性,并通过将查询分配到队列来确定查询的优先级。队列允许您为不同类型的查询或用户分配内存和 CPU 等资源,确保关键查询优先于不太重要的查询。以下各节将介绍如何创建队列、配置队列属性以及根据定义的标准分配传入查询。

以下示例根据用户角色、用户组和查询组向队列分配查询。

根据用户角色为队列分配查询

如果为用户分配某个角色,并且该角色附加到队列,则该用户运行的查询将分配给该队列。以下示例创建了一个名为 sales_rw 的用户角色并将用户 test_user 分配给该角色。

create role sales_rw; grant role sales_rw to test_user;

您还可以通过显式将一个角色授予另一个角色来合并两个角色的权限。为用户分配嵌套角色会向该用户授予这两个角色的权限。

create role sales_rw; create role sales_ro; grant role sales_ro to role sales_rw; grant role sales_rw to test_user;

要查看集群中已授予角色的用户列表,请查询 SVV_USER_GRANTS 表。要查看集群中已授予角色的角色列表,请查询 SVV_ROLE_GRANTS 表。

select * from svv_user_grants; select * from svv_role_grants;

根据用户组为队列分配查询

如果用户组名称列在队列定义中,则由该用户组的成员运行的查询会分配到相应的队列。下面的示例使用 SQL 命令 CREATE USERCREATE GROUPALTER GROUP 创建用户组并将用户添加到组。

create group admin_group with user admin246, admin135, sec555; create user vp1234 in group ad_hoc_group password 'vpPass1234'; alter group admin_group add user analyst44, analyst45, analyst46;

为查询组分配查询

您可以通过将查询分配到相应的查询组在运行时向队列分配查询。使用 SET 命令开始使用查询组。

SET query_group TO group_label

其中,group_label 是 WLM 配置中列出的查询组标签。

SET query_group 命令之后运行的所有查询都以指定查询组的成员身份运行,直到您重置查询组或结束当前登录会话为止。有关设置和重置 Amazon Redshift 对象的信息,请参阅“SQL 命令参考”中的 SETRESET

您指定的查询组标签必须包含在当前 WLM 配置中;否则,SET query_group 命令对查询队列不起作用。

查询日志会捕获在 TO 子句中定义的标签,因此,您可以利用标签进行故障排除。有关 query_group 配置参数的信息,请参阅“配置参考”中的 query_group

下面的示例将两个查询作为查询组“priority”的一部分运行,然后重置查询组。

set query_group to 'priority'; select count(*)from stv_blocklist; select query, elapsed, substring from svl_qlog order by query desc limit 5; reset query_group;

为超级用户队列分配查询

要向超级用户队列分配查询,请以超级用户身份登录 Amazon Redshift,然后在超级用户组中运行查询。完成后,重置查询组,使后续查询不会在超级用户队列中运行。

下面的示例分配两个命令以在超级用户队列中运行。

set query_group to 'superuser'; analyze; vacuum; reset query_group;

要查看超级用户的列表,请查询 PG_USER 系统目录表。

select * from pg_user where usesuper = 'true';