STV_RECENTS - Amazon Redshift

STV_RECENTS

使用 STV_RECENTS 表可以了解有关当前活动的和最近运行的数据库查询的信息。

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

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

使用 STV_RECENTS 进行故障排除

STV_RECENTS 对于确定一个查询或一组查询当前是正在运行还是已完成特别有用。它还显示查询运行的持续时间。这有助于了解哪些查询是长时间运行的。

您可以将 STV_RECENTS 联接到其他系统视图(例如 STV_INFLIGHT),以收集有关正在运行的查询的其他元数据。(示例查询部分中有一个示例显示了如何执行此操作。) 您还可以使用从该视图返回的记录以及 Amazon Redshift 控制台中的监控功能来实时排除故障。

对 STV_RECENTS 形成补充的系统视图包括 STL_QUERYTEXTSVV_QUERY_INFLIGHT,前者用于检索 SQL 命令的查询文本,后者用于将 STV_INFLIGHT 联接到 STL_QUERYTEXT。

表列

列名称 数据类型 描述
userid integer 生成条目的用户的 ID。
status character(20) 查询状态。有效值为 RunningDone
starttime timestamp 开始查询的时间。
duration integer 自会话启动以来经过的微秒数。
user_name character(50) 运行了进程的用户名。
db_name character(50) 数据库的名称。
query character(600) 查询文本,最多 600 个字符。截断所有的额外字符。
pid integer 与查询关联的会话的进程 ID,对于已完成的查询,该值始终为 -1。

示例查询

要确定当前正在对数据库运行哪些查询,请运行以下查询:

select user_name, db_name, pid, query from stv_recents where status = 'Running';

下面的示例输出显示对 TICKIT 数据库运行的单个查询:

user_name | db_name | pid | query ----------+---------+---------+------------- dwuser | tickit | 19996 |select venuename, venueseats from venue where venueseats > 50000 order by venueseats desc;

以下示例返回正在运行或者在队列中等待运行的查询(如果有)的列表:

select * from stv_recents where status<>'Done'; status | starttime | duration |user_name|db_name| query | pid -------+---------------------+----------+---------+-------+-----------+------ Running| 2010-04-21 16:11... | 281566454| dwuser |tickit | select ...| 23347

此查询不返回结果,除非正在运行一些并发查询,而其中一些查询位于队列中。

以下示例扩展前一示例。在此示例中,从结果中排除真正“正在进行”(正在运行,未在等待)的查询:

select * from stv_recents where status<>'Done' and pid not in (select pid from stv_inflight); ...

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