

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://www.amazonaws.cn/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# STL\_QUERY\_METRICS
<a name="r_STL_QUERY_METRICS"></a>

包含已完成在用户定义的查询队列中运行的查询的指标信息（如处理的行数、CPU 利用率、输入/输出和磁盘利用率）。要查看当前运行的活动查询的指标，请参阅 [STV\_QUERY\_METRICS](r_STV_QUERY_METRICS.md) 系统视图。

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

STL\_QUERY\_METRICS 可跟踪和聚合查询、段和步骤级别的指标。有关查询段和步骤的信息，请参阅[查询计划和执行工作流程](c-query-planning.md)。很多指标（如 `max_rows`、`cpu_time` 等）是跨节点切片进行合计的。有关节点切片的更多信息，请参阅[数据仓库系统架构](c_high_level_system_architecture.md)。

要确定行在哪个级别报告指标，请检查 `segment` 和 `step_type` 列。
+ 如果 `segment` 和 `step_type` 均为 `-1`，则行在查询级别报告指标。
+ 如果 `segment` 不为 `-1`，而 `step_type` 为 `-1`，则行在段级别报告指标。
+ 如果 `segment` 和 `step_type` 均不为 `-1`，则行在步骤级别报告指标。

[SVL\_QUERY\_METRICS](r_SVL_QUERY_METRICS.md) 视图和 [SVL\_QUERY\_METRICS\_SUMMARY](r_SVL_QUERY_METRICS_SUMMARY.md) 视图将聚合此视图中的数据并以更容易访问的形式呈现信息。

STL\_QUERY\_METRICS 对所有用户可见。超级用户可以查看所有行；普通用户只能查看其自己的数据。有关更多信息，请参阅 [系统表和视图中的数据可见性](cm_chap_system-tables.md#c_visibility-of-data)。

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

## 表列
<a name="r_STL_QUERY_METRICS-table-rows2"></a>


| 列名称  | 数据类型  | 描述  | 
| --- | --- | --- | 
| userid  | integer  | 运行生成条目的查询的用户的 ID。 | 
| service\_class  | integer  | 服务类的 ID。查询队列在 WLM 配置中定义。仅对用户定义的队列报告的指标。 | 
| query | integer  | 查询 ID。查询列可用于连接其他系统表和视图。 | 
| segment  | integer  | 段编号。一个查询包含多个区段，而且每个区段包含一个或多个步骤。查询段可并行运行。每个段在一个进程中运行。如果段值为 -1，则指标段值将汇总到查询级别。 | 
| step\_type  | integer  | 运行的步骤的类型。有关步骤类型的说明，请参阅[步骤类型](r_STV_QUERY_METRICS.md#r_STV_QUERY_METRICS-step-type)。 | 
| starttime  | timestamp  | 开始执行查询的时间（用 UTC 表示），有 6 位数字精度，可精确到小数秒。例如：2009-06-12 11:29:19.131358。 | 
| 切片  | integer  | 集群的切片数。 | 
| max\_rows  | bigint  | 某个步骤的最大行输出数（跨所有切片进行聚合）。 | 
| rows  | bigint  | 步骤处理的行数。 | 
| max\_cpu\_time  | bigint  | 使用的最大 CPU 时间（以微秒为单位）。在段级别，段的跨所有切片使用的最大 CPU 时间。在查询级别，查询段使用的最大 CPU 时间。 | 
| cpu\_time  | bigint  | 使用的 CPU 时间（单位为微秒）。在段级别，段的跨所有切片的总 CPU 时间。在查询级别，查询的跨所有切片和段的 CPU 时间合计。 | 
| max\_blocks\_read  | 整数  | 段读取的 1 MB 数据块的最大数量（跨所有切片进行聚合）。在段级别，段的跨所有切片读取的 1 MB 数据块的最大数量。在查询级别，任何查询段读取的 1 MB 数据块的最大数量。 | 
| blocks\_read  | bigint  | 查询或段读取的 1 MB 数据块的数量。 | 
| max\_run\_time  | bigint  | 段的最大已用时间（以微秒为单位）。在段级别，段的跨所有切片的最大运行时间。在查询级别，任何查询段的最大运行时间。 | 
| run\_time  | bigint  | 跨所有切片合计的总运行时间。运行时间不包括等待时间。<br />在段级别，跨所有切片合计的段的运行时间。在查询级别，跨所有切片和段合计的查询的运行时间。由于此值是一个合计，因此运行时间与查询执行时间无关。 | 
| max\_blocks\_to\_disk  | bigint  | 用于写入中间结果的最大磁盘空间量（以 MB 数据块为单位）。在段级别，段跨所有切片使用的最大磁盘空间量。在查询级别，任何查询段使用的最大磁盘空间量。 | 
| blocks\_to\_disk  | bigint  | 查询和段用于写入中间结果使用的磁盘空间量（以 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  | 查询排队的时间（以微秒为单位）。 | 
| service\_class\_name | character(64) | 服务类的名称。 | 

## 示例查询
<a name="r_STL_QUERY_METRICS-sample-query2"></a>

要查找具有较长的 CPU 时间（1000 秒以上）的查询，请运行以下查询。

```
Select query, cpu_time / 1000000 as cpu_seconds
from stl_query_metrics where segment = -1 and cpu_time > 1000000000
order by cpu_time;

query | cpu_seconds
------+------------
25775 |        9540
```

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

```
select query, rows 
from stl_query_metrics 
where step_type = 15 and rows > 1000000
order by rows;

query | rows      
------+-----------
25775 | 2621562702
```

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

```
select query, run_time/1000000 as run_time_seconds
from stl_query_metrics 
where segment = -1 and run_time > 60000000 and cpu_time < 10000000;

query | run_time_seconds
------+-----------------
25775 |              114
```