STV_QUERY_METRICS - Amazon Redshift

STV_QUERY_METRICS

包含正在用户定义的查询队列中运行的活动查询的指标信息(如处理的行数、CPU 利用率、输入/输出和磁盘利用率)。要查看已完成的查询的指标,请参阅 STL_QUERY_METRICS 系统表。

查询指标按一秒的间隔采样。因此,同一查询的不同运行可能返回稍微不同的时间。此外,运行不到 1 秒的查询段可能不会记录。

STV_QUERY_METRICS 可跟踪和聚合查询、段和步骤级别的指标。有关查询段和步骤的信息,请参阅查询计划和执行工作流程。很多指标(如 max_rowscpu_time 等)是跨节点切片进行合计的。有关节点切片的更多信息,请参阅数据仓库系统架构

要确定行在哪个级别报告指标,请检查 segmentstep_type 列:

  • 如果 segmentstep_type 均为 -1,则行在查询级别报告指标。

  • 如果 segment 不为 -1,而 step_type-1,则行在段级别报告指标。

  • 如果 segmentstep_type 均不为 -1,则行在步骤级别报告指标。

STV_QUERY_METRICS 对所有用户可见。超级用户可以查看所有行;普通用户只能查看其自己的数据。有关更多信息,请参阅 系统表和视图中的数据可见性

此表中的部分或全部数据也可以在 SYS 监控视图 SYS_QUERY_DETAIL 中找到。SYS 监控视图中的数据经过格式化处理,便于使用和理解。我们建议您使用 SYS 监控视图进行查询。

表列

列名称 数据类型 描述
userid integer 运行生成条目的查询的用户的 ID。
service_class integer WLM 查询队列(服务类)的 ID。查询队列在 WLM 配置中定义。仅对用户定义的队列报告的指标。
query integer 查询 ID。查询列可用于连接其他系统表和视图。
starttime timestamp 开始执行查询的时间(用 UTC 表示),有 6 位数字精度,可精确到小数秒。例如:2009-06-12 11:29:19.131358
切片 integer 集群的切片数。
segment integer 段编号。一个查询包含多个区段,而且每个区段包含一个或多个步骤。查询段可并行运行。每个段在一个进程中运行。如果段值为 -1,则指标段值将汇总到查询级别。
step_type integer 运行的步骤的类型。有关步骤类型的说明,请参阅步骤类型
rows bigint 步骤处理的行数。
max_rows bigint 某个步骤的最大行输出数(跨所有切片进行聚合)。
cpu_time bigint 使用的 CPU 时间(单位为微秒)。在段级别,段的跨所有切片的总 CPU 时间。在查询级别,查询的跨所有切片和段的 CPU 时间合计。
max_cpu_time bigint 使用的最大 CPU 时间(以微秒为单位)。在段级别,段的跨所有切片使用的最大 CPU 时间。在查询级别,查询段使用的最大 CPU 时间。
blocks_read bigint 查询或段读取的 1 MB 数据块的数量。
max_blocks_read bigint 段读取的 1 MB 数据块的最大数量(跨所有切片进行聚合)。在段级别,段的跨所有切片读取的 1 MB 数据块的最大数量。在查询级别,任何查询段读取的 1 MB 数据块的最大数量。
run_time bigint

跨所有切片合计的总运行时间。运行时间不包括等待时间。

在段级别,跨所有切片合计的段的运行时间。在查询级别,跨所有切片和段合计的查询的运行时间。由于此值是一个合计,因此运行时间与查询执行时间无关。

max_run_time bigint 段的最大已用时间(以微秒为单位)。在段级别,段的跨所有切片的最大运行时间。在查询级别,任何查询段的最大运行时间。
max_blocks_to_disk bigint 用于写入中间结果的最大磁盘空间量(以 1 MB 数据块为单位)。在段级别,段跨所有切片使用的最大磁盘空间量。在查询级别,任何查询段使用的最大磁盘空间量。
blocks_to_disk bigint 查询和段用于写入中间结果使用的磁盘空间量(以 1 MB 数据块为单位)。
step integer 运行的查询步骤。
max_query_scan_size bigint 查询扫描的数据的最大大小(以 MB 为单位)。在段级别,段跨所有切片扫描的数据的最大大小。在查询级别,任何查询段扫描的数据的最大大小。
query_scan_size bigint 查询扫描的数据的大小(以 MB 为单位)。
query_priority integer 查询的优先级。可能的值为 -101234,其中 -1 表示不支持查询优先级。
query_queue_time bigint 查询排队的时间(以微秒为单位)。

步骤类型

下表列出了与数据库用户相关的步骤类型。该表未列出仅供内部使用的步骤类型。如果步骤类型为 -1,则不会在步骤级别报告指标。

步骤类型 描述
1 扫描表
2 插入行
3 聚合行
6 为步骤排序
7 合并步骤
8 分配步骤
9 广播分配步骤
10 哈希联接
11 合并联接
12 保存步骤
14 哈希
15 嵌套循环联接
16 项目字段和表达式
17 限制返回的行数
18 唯一
20 删除行
26 限制返回的已排序行的数量
29 计算窗口函数
32 UDF
33 唯一
37 将行从领导节点返回到客户端
38 返回从计算节点到领导节点的行
40 Spectrum 扫描。

示例查询

要查找具有较长的 CPU 时间(1000 秒以上)的活动查询,请运行以下查询。

select query, cpu_time / 1000000 as cpu_seconds from stv_query_metrics where segment = -1 and cpu_time > 1000000000 order by cpu_time; query | cpu_seconds ------+------------ 25775 | 9540

要查找具有返回超过一百万个行的嵌套循环联接的活动查询,请运行以下查询。

select query, rows from stv_query_metrics where step_type = 15 and rows > 1000000 order by rows; query | rows ------+----------- 25775 | 1580225854

要查找已运行超过 60 秒且使用的 CPU 时间不到 10 秒的活动查询,请运行以下查询。

select query, run_time/1000000 as run_time_seconds from stv_query_metrics where segment = -1 and run_time > 60000000 and cpu_time < 10000000; query | run_time_seconds ------+----------------- 25775 | 114