STV_INFLIGHT - Amazon Redshift

STV_INFLIGHT

使用 STV_INFLIGHT 表可确定当前正在对集群运行的查询。如果您正在进行故障排除,这有助于检查长时间运行的查询的状态。

STV_INFLIGHT 不会显示仅领导节点查询。有关更多信息,请参阅 仅领导节点函数。STV_INFLIGHT 对所有用户可见。超级用户可以查看所有行;普通用户只能查看其自己的数据。有关更多信息,请参阅 系统表和视图中的数据可见性

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

使用 STV_INFLIGHT 进行故障排除

如果您使用 STV_INFLIGHT 对一个查询或一组查询的性能进行故障排除,请注意以下几点:

  • 长时间运行的未结事务通常会增加负载。这些未结事务可能会导致其他查询的运行时间更长。

  • 如果长时间运行的 COPY 和 ETL 任务占用了大量计算资源,则可能会影响集群上运行的其他查询。在大多数情况下,将这些长时间运行的任务移至使用率较低的时间,可以提高报告或分析工作负载的性能。

  • 有些视图为 STV_INFLIGHT 提供了相关信息。其中包括 STL_QUERYTEXT(用于捕获 SQL 命令的查询文本)和 SVV_QUERY_INFLIGHT(用于将 STV_INFLIGHT 联接到 STL_QUERYTEXT)。您也可以将 STV_RECENTS 与 STV_INFLIGHT 结合使用来进行故障排除。例如,STV_RECENTS 可以指示特定查询是处于正在运行 还是已完成 状态。将这些信息与来自 STV_INFLIGHT 的结果相结合,可以为您提供有关查询的属性和计算资源影响的更多信息。

您还可以使用 Amazon Redshift 控制台监控正在运行的查询。

表列

列名称 数据类型 描述
userid integer 生成条目的用户的 ID。
slice integer 正在运行查询的分片。
query integer 查询 ID。可用于联接各种其他系统表和视图。
label character(320) 用于运行查询的文件的名称或使用 SET QUERY_GROUP 命令定义的标签。如果查询并非基于文件或未设置 QUERY_GROUP 参数,则此字段为空。
xid bigint 事务 ID。
pid integer 进程 ID。会话中的所有查询在同一进程中运行,因此,如果您在同一会话中运行一系列查询,则此值保持不变。您可以使用此列联接到 STL_ERROR 表。
starttime timestamp 开始查询的时间。
text character(100) 查询文本,截断为 100 个字符(如果语句超过此限制)。
suspended integer 查询是否已暂停。0 = false;1 = true。
insert_pristine integer 当前查询正在运行时,是否可以运行写查询。1 = 不允许写查询。0 = 允许写查询。此列专用在调试中。
concurrency_scaling_status integer

指示查询运行在主集群还是并发扩展集群上,可能值如下所示:

0 - 运行在主集群上

1 - 运行在并发扩展集群上

示例查询

要查看当前正在对数据库运行的所有活动查询,请键入以下查询:

select * from stv_inflight;

下面的示例输出显示当前正在运行两个查询,其中包括 STV_INFLIGHT 查询自身和已从名为 avgwait.sql 的脚本运行的查询:

select slice, query, trim(label) querylabel, pid, starttime, substring(text,1,20) querytext from stv_inflight; slice|query|querylabel | pid | starttime | querytext -----+-----+-----------+-----+--------------------------+-------------------- 1011 | 21 | | 646 |2012-01-26 13:23:15.645503|select slice, query, 1011 | 20 |avgwait.sql| 499 |2012-01-26 13:23:14.159912|select avg(datediff( (2 rows)

以下查询选择了几列,包括 concurrency_scaling_status。此列表示是否正在向并发扩展集群发送查询。如果对于某些结果,该值为 1,则表明正在使用并发扩展计算资源。有关更多信息,请参阅 使用并发扩展

select userid, query, pid, starttime, text, suspended, concurrency_scaling_status from STV_INFLIGHT;

示例输出显示了正在将一个查询发送到并发扩展集群。

query | pid | starttime | text | suspended | concurrency_scaling_status --------+---------+----------------------------|------------------------|---------------|------------------------------- 1234567 | 123456 | 2012-01-26 13:23:15.645503 | select userid, query... 0 1 2345678 | 234567 | 2012-01-26 13:23:14.159912 | select avg(datediff(... 0 0 (2 rows)

有关排除查询性能故障的更多提示,请参阅查询故障排除