刚刚通过实验,发现v$sql 的FIRST_LOAD_TIME,LAST_LOAD_TIME的时间不一致,不一定是新的子游标产生了,还有一种情况,就是v$sql 在缓存中内容被清除了。下面是我的一个sql在停了一段时间后,再次执行后观察到的
可以看到FIRST_LOAD_TIME还是这个sql第一次执行的时间,child_number还是0(即第一个子游标),但是看LAST_LOAD_TIME已经被刷新了,LOADS变成了2,说明这个子游标是第二次被加载。之前为了对比的子游标(child_number=2)已经从v$sql中消失了,这个时候执行次数也是被重置的!!!!
再看看V$SQLAREA中的情况
可以看到V$SQLAREA里面的执行次数也被重置了!LOADED_VERSIONS显示这个sql在v$sql 中只有1个子游标,但是加载了3次(之前child_number的0和1+被清除后重新加载的child_number 0)
虽然这种也会导致v$sql 中的执行次数的重置,但是不符合sql一直在运行的前置条件。因为当前在v$sql 中只存在一个子游标,所以v$sql_shared_cursor也只有一行记录