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)
有关排除查询性能故障的更多提示,请参阅查询故障排除。