DBA_HIST_SQLSTAT与GV $ SQL

时间:2018-06-20 12:32:37

标签: oracle oracle11g

我试图创建一个仪表板,以比较多个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可以在较短的时间内执行更多的操作。

1 个答案:

答案 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_loadbegin_interval_time进行比较。

因此,对于比较游标历史和当前统计信息的报告,您只能使用视图DBA_HIST_SQLSTAT将最后一个快照增量统计信息解释为当前,将其余快照统计信息解释为历史部分。