我试图创建一个仪表板,比较历史执行和当前多个SQL语句的执行情况。我注意到GV$SQL和DBA_HIST_SQLSTAT中的统计数据有一些不同。请你帮我们理解以下几点好吗?
对于一个SQL_ID,我在DBA_HIST_SQLSTAT和DBA_HIST_SNAPSHOT中有37行(对于所有人都有相同的PHV和相同的子编号)。executions_delta列之和给我91。但是,根据GV$SQL,执行只有40次。
从DBA_HIST_SNAPSHOT开始间隔时间为23/5/2018,最大结束间隔时间为5/6/2018。First_load_time和last_load_time v$sql分别为2018年1月31日和2018年6月18日。
请帮助我理解为什么与gv$sql值相比,DBA_HIST_SNAPSHOT可以在更短的时间内有更多的执行次数。
发布于 2018-06-20 16:14:23
SQLSTAT状态的文献
DBA_HIST_SQLSTAT显示有关SQL统计信息的历史信息。该视图基于一组标准捕获顶级SQL语句,并从V$SQL捕获统计信息。增量值是从BEGIN_INTERVAL_TIME到DBA_HIST_SNAPSHOT视图中的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,将最后一个快照增量统计数据解释为当前,其余部分作为历史数据。
https://stackoverflow.com/questions/50948379
复制相似问题