STV_QUERY_METRICS
包含正在用户定义的查询队列中运行的活动查询的指标信息(如处理的行数、CPU 利用率、输入/输出和磁盘利用率)。要查看已完成的查询的指标,请参阅 STL_QUERY_METRICS 系统表。
查询指标按一秒的间隔采样。因此,同一查询的不同运行可能返回稍微不同的时间。此外,运行不到 1 秒的查询段可能不会记录。
STV_QUERY_METRICS 可跟踪和聚合查询、段和步骤级别的指标。有关查询段和步骤的信息,请参阅查询计划和执行工作流程。很多指标(如 max_rows
、cpu_time
等)是跨节点切片进行合计的。有关节点切片的更多信息,请参阅数据仓库系统架构。
要确定行在哪个级别报告指标,请检查 segment
和 step_type
列:
-
如果
segment
和step_type
均为-1
,则行在查询级别报告指标。 -
如果
segment
不为-1
,而step_type
为-1
,则行在段级别报告指标。 -
如果
segment
和step_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 | 查询的优先级。可能的值为 -1 、0 、1 、2 、3 和 4 ,其中 -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