我试图创建一个仪表板,以比较多个SQL语句的历史执行和当前执行。我注意到GV $ SQL和DBA_HIST_SQLSTAT中的统计信息之间存在一些差异。您能否帮助我们理解以下几点。
例如:对于一个SQL_ID,我在DBA_HIST_SQLSTAT和DBA_HIST_SNAPSHOT中有37行(所有的PHV和子编号均相同)。 executes_delta列的总和为91。但是,根据GV $ SQL,EXECUTIONS只有40。
从DBA_HIST_SNAPSHOT开始的最小开始间隔时间是2018年5月23日,最大结束间隔时间是2018年6月5日。 v $ sql中的first_load_time和last_load_time分别为2018年1月31日和2018年6月18日。
请帮助我理解为什么与gv $ sql值相比,DBA_HIST_SNAPSHOT可以在较短的时间内执行更多的操作。
答案 0 :(得分:2)
DBA_HIST_SQLSTAT的文献记录
DBA_HIST_SQLSTAT显示有关SQL统计信息的历史信息。该视图基于一组条件捕获最重要的SQL语句,并捕获来自V $ SQL的统计信息。
增量值是DBA_HIST_SNAPSHOT视图中从BEGIN_INTERVAL_TIME到END_INTERVAL_TIME的统计值。
所以这就是为什么视图DBA_HIST_SQLSTAT具有更多执行的解释。这是历史视图,保留了所有捕获的执行。相反,如果从共享池中清除了游标,则其统计信息将从V$SQL
(或GV$SQL
)中消失。
第二点是与统计有关的时间间隔。在DBA_HIST_SQLSTAT中,delta
统计信息与两个快照之间的间隔明显相关-在视图DBA_HIST_SNAPSHOT
中定义。
在V$SQL
中没有可比较的时间间隔,尤其是您无法将first_load
与begin_interval_time
进行比较。
因此,对于比较游标历史和当前统计信息的报告,您只能使用视图DBA_HIST_SQLSTAT将最后一个快照增量统计信息解释为当前,将其余快照统计信息解释为历史部分。