Redshift:stv_inflight和stv_recents显示冲突的结果

问题描述

根据文档,

要确定当前针对数据库运行的查询,请键入以下查询

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

此外,根据文档,

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

select * from stv_inflight;

但是,我发现两个结果集有时不匹配。现在,有一些SELECT查询已从客户端中止,并且没有显示在stv_inflight表中,但它们以stunning_状态显示在stv_recents表中。

有人可以解释为什么会这样吗?

P.S。查询涉及用户定义的表。

解决方法

来自 Redshift 系统表和视图上的 documentation

STV 视图是包含当前系统数据快照的虚拟视图。它们基于暂时的内存数据,不会持久化到基于磁盘的日志或常规表中。

此外,文档解释了以下矛盾的例子。

以下针对系统表的查询很可能会返回行

select * from stv_exec_state
where currenttime > (select max(currenttime) from stv_exec_state)

因此,总的来说,如果您对 STV 表运行查询,您得到的响应将基于内存系统数据结构的瞬时状态,并且两个后续查询的响应很可能不相关.