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

WLM 查询监控规则

在 Amazon Redshift 工作负载管理 (WLM) 中,查询监控规则为 WLM 查询定义基于指标的性能界限,并指定在查询超出这些界限时需要采取的操作。例如,对于短时间运行查询专用的队列,您可创建中止运行超过 60 秒的查询的规则。要跟踪设计不佳的查询,您可创建记录包含嵌套循环的查询的其他规则。

您将在工作负载管理 (WLM) 配置中定义查询监控规则。您最多可以为每个队列定义 8 个规则,而且所有队列的限制为 8 个规则。每个规则最多包括三个条件 (即,谓词) 和一个操作。谓词 包含指标、比较条件 (=、< 或 >) 和值。如果满足任何规则的所有谓词,则会触发该规则的操作。可能的规则操作有 log、hop 和 abort,如以下所讨论的。

某个给定队列中的规则只能应用于在该队列中运行的查询。各个规则彼此独立。

WLM 每 10 秒评估一次指标。如果同一期间内触发了多个规则,WLM 将启动最严厉的操作 - abort、hop、然后是 log。如果操作为 hop 或 abort,则将记录操作且从队列中移出查询。如果操作为 log,则查询将继续在队列中运行。WLM 针对每个规则的每个查询仅启用一个 log 操作。如果队列中包含其他规则,这些规则将保持有效。如果操作为 hop 且将查询路由到其他队列,则将应用新队列的规则。

当满足规则的所有谓词时,WLM 会在 STL_WLM_RULE_ACTION 系统表中写入一行。此外,Amazon Redshift 会将当前运行的查询的查询指标记录到 STV_QUERY_METRICS。已完成的查询的指标存储在 STL_QUERY_METRICS 中。

定义查询监控规则

您创建属于您的 WLM 配置的一部分的查询监控规则,您可将该规则定义为您集群的参数组定义的一部分。

您可使用 AWS 管理控制台或以编程方式使用 JSON 来创建规则。

注意

如果您选择以编程方式创建规则,强烈建议您使用控制台生成包含在参数组定义中的 JSON。有关更多信息,请参阅 Amazon Redshift Cluster Management Guide 中的 使用控制台创建或修改查询监控规则使用 AWS CLI 配置参数值

要定义查询监控规则,您要指定以下元素:

  • 一个规则名称 – 规则名称必须在 WLM 配置内是唯一的。规则名称最多可包含 32 个字母数字字符或下划线,且不能包含空格或引号。您可以让每个队列有八个规则,并且所有队列的总限制为八个规则。

  • 一个或多个谓词 – 您最多可以为每个规则设置三个谓词。如果满足任何规则的所有谓词,则会触发关联操作。谓词由指标名称、运算符 ( =、< 或 >) 和值定义。示例是 query_cpu_time > 100000。有关指标列表以及不同指标值的示例,请参阅本部分中后面的查询监控指标

  • 操作 – 如果触发了多个操作,则 WLM 会选择具有最严重操作的规则。可能的操作 (按严重性的升序顺序) 包括:

    • Log – 记录有关 STL_WLM_RULE_ACTION 系统表中查询的信息。在您想要仅写入日志记录时使用 Log 操作。WLM 针对每个规则的每个查询最多创建一个日志。log 操作后,其他规则将保持有效且 WLM 将继续监控查询。

    • Hop – 记录操作、终止查询并在下一个匹配的队列中重新启动查询。如果没有其他匹配的队列,则取消查询。达到 Returning WLM 状态的查询不会跳过。要了解查询的 WLM 状态,请查看 STV_WLM_QUERY_STATE 系统表中的 STATE 列。有关更多信息,请参阅 WLM 查询队列跳跃

    • Abort – 记录操作并终止查询。

有关创建或修改查询监控规则的步骤,请参阅 Amazon Redshift Cluster Management Guide 中的使用控制台创建或修改查询监控规则wlm_json_configuration 参数中的属性

您可以在以下主题中找到有关查询监控规则的更多信息:

查询监控指标

下表描述了查询监控规则中使用的指标。(这些指标与存储在 STV_QUERY_METRICSSTL_QUERY_METRICS 系统表中的指标不同。)

对于某个给定指标,将在查询级别或段级别跟踪性能阈值。有关段和步骤的更多信息,请参阅查询计划和执行工作流程

注意

WLM 超时 参数与查询监控规则不同。

指标 名称 描述
查询 CPU 时间 query_cpu_time 查询使用的 CPU 时间 (以秒为单位)。CPU timeQuery execution time 不同。

有效值为 0 到 10^6。

数据块读取 query_blocks_read 查询读取的 1 MB 数据块的数量。

有效值为 0 到 1024^2。

扫描行数 scan_row_count 扫描步骤中行的数量。

有效值为 0 到 1024^4

查询执行时间 query_execution_time 执行查询所用的时间 (以秒为单位)。执行时间不包括在队列中等待的时间。

有效值为 0 到 86399。

CPU 使用率 query_cpu_usage_percent 查询使用的 CPU 容量的百分比。

有效值为 0 到 6399。

内存到磁盘 query_temp_blocks_to_disk 用于写入中间结果的临时磁盘空间 (单位为 1 MB 数据块)。

有效值为 0 到 31981567。

CPU 偏斜 cpu_skew 任何切片的最大 CPU 使用率与所有切片的平均 CPU 使用率的比率。此指标在段级别进行定义。

有效值为 0 到 99。

I/O 偏斜 io_skew 任何切片的最大数据块读取 (I/O) 与所有切片的平均数据块读取的比率。此指标在段级别进行定义。

有效值为 0 到 99。

联接的行 join_row_count 联接步骤中处理的行数。

有效值为 0 到 10^15。

嵌套循环联接行数 nested_loop_join_row_count 嵌套循环联接中行的数量。

有效值为 0 到 10^15。

返回行数 return_row_count 查询返回的行数。

有效值为 0 到 10^15。

段执行时间 segment_execution_time 执行单个段所用的时间 (以秒为单位)。为避免或减少采样错误,请在规则中包括 segment_execution_time > 10

有效值为 0 到 86388

Spectrum 扫描行数 spectrum_scan_row_count Amazon S3 中由 Amazon Redshift Spectrum 查询扫描的数据的行数。

有效值为 0 到 10^15

Spectrum 扫描大小 spectrum_scan_size_mb Amazon S3 中由 Amazon Redshift Spectrum 查询执行的数据的大小 (MB)。

有效值为 0 到 10^15

注意

较短的段执行时间可能会导致某些指标 (例如 io_skewquery_cpu_percent) 出现采样错误。为避免或减少采样错误,请在规则中包括段执行时间。segment_execution_time > 10 是一个好起点。

SVL_QUERY_METRICS 视图显示已完成查询的指标。SVL_QUERY_METRICS_SUMMARY 视图显示已完成查询的指标的最大值。使用这些视图中的值帮助确定用于定义查询监控规则的阈值。

查询监控规则模板

当您使用 Amazon Redshift 控制台添加规则时,可以选择从预定义的模板中创建规则。Amazon Redshift 将创建具有一组谓词的新规则并使用默认值填充这些谓词。默认操作是 log。您可以修改这些谓词和操作以满足您的使用案例。

下表列出了可用的模板。

模板名称 谓词 描述
嵌套循环联接 nested_loop_join_row_count > 100 嵌套循环联接可能表示未完成的联接谓词,这通常会产生一个非常大的返回集 (笛卡尔积)。请使用一个较小的行数以及早找到潜在的失控查询。
查询返回了大量的行 return_row_count > 1000000 如果您将队列指定为简单的短时间运行查询,则可包含查找返回较大行数的查询的规则。该模板使用 100 万个行的默认值。对于某些系统,您可能认为 100 万个行过大,或者在较大型系统中,100 万或更多个行可能过大。
与大量的行联接 join_row_count > 1000000000 涉及异常过大行数的联接步骤可能表示需要更严格的筛选条件。该模板使用 10 亿个行的默认值。对于旨在快速简单查询的临时查询,您可使用较小的行数。
写入中间结果时占用大量的磁盘空间 query_temp_blocks_to_disk > 100000 如果当前正在执行的查询使用多个可用的系统 RAM,则查询执行引擎会将中间结果写入磁盘 (溢出的内存)。通常,此条件是恶意查询的结果,通常也是使用大部分磁盘空间的查询。磁盘使用率的可接受阈值因集群节点类型和节点数而异。该模板使用 100000 个数据块或 100 GB 的默认值。对于小型集群,您可使用较小的数字。
I/O 偏斜高的查询运行时间长 segment_execution_time > 120io_skew > 1.30 I/O 偏斜发生在一个节点切片具有的 I/O 比率要比其他切片的比率高得多的时候。作为起点,1.30 的偏斜 (平均 1.3 倍) 被认为较高。高 I/O 偏斜并不总是一个问题,但在与长时间运行的查询结合时,它可能表示分配方式或排序键存在问题。

查询监控规则的系统表和视图

当满足规则的所有谓词时,WLM 会将行写入包含有关触发了规则和生成的操作的详细信息的 STL_WLM_RULE_ACTION 系统表。

此外,Amazon Redshift 会将查询指标记录到两个系统表。