Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

第 1 节:了解默认队列处理行为

在您开始配置 WLM 前,了解 Amazon Redshift 中队列处理的默认行为是很有用的。在此节中,您将创建两个从多个系统表中返回信息的数据库视图。然后,您将运行一些测试查询以了解默认情况下路由查询的方式。有关系统表的更多信息,请参阅系统表参考

步骤 1:创建 WLM_QUEUE_STATE_VW 视图

在此步骤中,您将创建一个名为“WLM_QUEUE_STATE_VW”的视图。此视图返回以下系统表中的信息。

您将在整个教程中使用此视图来监控在更改 WLM 配置后队列将发生的情况。下表描述了 WLM_QUEUE_STATE_VW 视图返回的数据。

描述
queue 与表示一个队列的行关联的编号。队列编号确定了队列在数据库中的顺序。
description 一个值,用于描述队列是仅适用于某些用户组、某些查询组还是所有类型的查询。
slots 分配给队列的槽位数量。
mem 分配给队列的内存量(以每个槽的 MB 数为单位)。
max_execution_time 在查询终止之前允许其运行的时间量。
user_* 一个值,用于指示是否允许在 WLM 配置中使用通配符来匹配用户组。
query_* 一个值,用于指示是否允许在 WLM 配置中使用通配符来匹配查询组。
queued 正在队列中等待进行处理的查询的数量。
executing 目前正在执行的查询的数量。
executed 已执行的查询的数量。

创建 WLM_QUEUE_STATE_VW 视图

  1. 打开 psql 并连接到您的 TICKIT 示例数据库。如果您没有此数据库,请参阅先决条件

  2. 运行以下查询以创建 WLM_QUEUE_STATE_VW 视图。

    Copy
    create view WLM_QUEUE_STATE_VW as select (config.service_class-5) as queue , trim (class.condition) as description , config.num_query_tasks as slots , config.query_working_mem as mem , config.max_execution_time as max_time , config.user_group_wild_card as "user_*" , config.query_group_wild_card as "query_*" , state.num_queued_queries queued , state.num_executing_queries executing , state.num_executed_queries executed from STV_WLM_CLASSIFICATION_CONFIG class, STV_WLM_SERVICE_CLASS_CONFIG config, STV_WLM_SERVICE_CLASS_STATE state where class.action_service_class = config.service_class and class.action_service_class = state.service_class and config.service_class > 4 order by config.service_class;
  3. 运行以下查询以查看该视图包含的信息。

    Copy
    select * from wlm_queue_state_vw;

    下面是示例结果。

步骤 2:创建 WLM_QUERY_STATE_VW 视图

在此步骤中,您将创建一个名为“WLM_QUERY_STATE_VW”的视图。此视图返回 STV_WLM_QUERY_STATE 系统表中的信息。

您将在整个教程中使用此视图来监控正在运行的查询。下表描述了 WLM_QUERY_STATE_VW 视图返回的数据。

描述
query 查询 ID。
queue 队列编号。
slot_count 分配给查询的槽位数量。
start_time 启动查询的时间。
state 查询的状态,如“正在执行”。
queue_time 查询已在队列中等待的微秒数。
exec_time 查询已执行的微秒数。

创建 WLM_QUERY_STATE_VW 视图

  1. 在 psql 中,运行以下查询以创建 WLM_QUERY_STATE_VW 视图。

    Copy
    create view WLM_QUERY_STATE_VW as select query, (service_class-5) as queue, slot_count, trim(wlm_start_time) as start_time, trim(state) as state, trim(queue_time) as queue_time, trim(exec_time) as exec_time from stv_wlm_query_state;
  2. 运行以下查询以查看该视图包含的信息。

    Copy
    select * from wlm_query_state_vw;

    下面是示例结果。

步骤 3:运行测试查询

在此步骤中,您将在 psql 中通过多个连接运行查询,并查看系统表以确定路由查询以进行处理的方式。

在此步骤中,您将需要打开两个 psql 窗口:

  • 在 psql 窗口 1 中,您将运行用于监控队列状态的查询和使用已在本教程中创建的视图的查询。

  • 在 psql 窗口 2 中,您将运行长时间运行的查询以更改在 psql 窗口 1 中找到的结果。

运行测试查询

  1. 打开两个 psql 窗口。如果您已打开一个窗口,则只需打开另一个窗口。您可针对这两个连接使用同一用户账户。

  2. 在 psql 窗口 1 中,运行以下查询。

    Copy
    select * from wlm_query_state_vw;

    下面是示例结果。

    此查询返回一个自引用结果。当前正在执行的查询是来自此视图的 SELECT 语句。对此视图的查询将始终至少返回一个结果。您会将此结果与在下一步中启动长时间运行的查询后产生的结果进行比较。

  3. 在 psql 窗口 2 中,从 TICKIT 示例数据库运行以下查询。

    Copy
    select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;

    注意

    此查询应会运行约一分钟时间,因此您有时间来探究之前创建的 WLM_QUEUE_STATE_VW 视图和 WLM_QUERY_STATE_VW 视图的结果。如果您发现查询运行的时长不足以查询这两个视图,则可以增加 l.listid 的值以使其运行更长时间。

  4. 在 psql 窗口 1 中,查询 WLM_QUEUE_STATE_VW 和 WLM_QUERY_STATE_VW 并将结果与之前的结果进行比较。

    Copy
    select * from wlm_queue_state_vw; select * from wlm_query_state_vw;

    以下是示例结果。

请注意,之前的查询结果与本步骤中的结果之间存在以下区别:

  • WLM_QUERY_STATE_VW 中现在有两行。一个结果是用于对此视图运行 SELECT 操作的自引用查询。第二个结果是上一步中的长时间运行的查询。

  • WLM_QUEUE_STATE_VW 中的 executing 列已从 1 增加到 2。此列条目表示队列中有两个正在运行的查询。

  • executed 列在您每次在队列中运行一个查询时将会递增。

WLM_QUEUE_STATE_VW 视图可用于全面了解队列以及每个队列中正在处理的查询的数量。WLM_QUERY_STATE_VW 视图可用于更详细地了解当前正在运行的单个查询。