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_QUERYTEXT 和 SVV_QUERY_INFLIGHT,前者用于检索 SQL 命令的查询文本,后者用于将 STV_INFLIGHT 联接到 STL_QUERYTEXT。
表列
列名称 | 数据类型 | 描述 |
---|---|---|
userid | integer | 生成条目的用户的 ID。 |
status | character(20) | 查询状态。有效值为 Running 、Done 。 |
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); ...
有关排除查询性能故障的更多提示,请参阅查询故障排除。