oracle中的视图v_$sqlarea和视图v_$sqltext保存的是从安装ORACLE开始全部的语句吗?

oracle中的视图v_$sqlarea和视图v_$sqltext保存的是从安装ORACLE开始全部的语句吗?如果不是,那么是什么时间段的记录?
那请问,如果一个SELECT语句已经执行完毕返回结果了,那么这条SQL语句是否还在内存中?是否还在v_$sqlarea和v_$sqltext表中?

1.这些都是动态性能视图,都是从库启动之后开始存在的(准确的讲,启动的不同阶段可以查看的视图也不一样),不是从安装开始。
2.记录的都是内存中共享SQL区内的SQL语句,都是最近在运行的语句,所以很久之前运行过的SQL肯定不记录在视图内了。

刚执行完的我想应该还在库缓存中,动态性能视图中也有记录,但是时间太久的话该SQL会被踢出库缓存,具体的踢出算法猜测是用LRU算法。所以实际长了,该SQL就不在内存中了。可以参考这个帖子:
http://www.itpub.net/viewthread.php?tid=676845&extra=&page=1
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-06-09
这些属于性能视图,它的内容应该只是在实例的生存周期内存在。也就是你启动oracle实例后的记录。
第2个回答  2010-06-09
不是一安装完就一直记录保存在这些视图里面的,因为其是记录在share pool(共享池)里面的,所以每次oracle关闭后都会清除掉,下次重新启动oracle时重新往里面添加记录的,当然,也可以手工执行命令"alter system flush SHARED_POOL"进行清除然后再重新记录。可见,这2个视图是记录自最后一次oracle启动以来的“共享的SQL”(当然中间如果手工执行了刷新SHARED_POOL的操作除外)
第3个回答  2010-06-14
1.不是,保存的是从实力启动以来还在library cache 中的语句.如果语句已经从共享池中清除出去,那么也不会在这两个视图中显示

2.对于已经执行完毕的语句,oracle不会马上从共享池中清除出去.oracle是按照lru算法管理内存的

只要你的语句还在共享池中,就可以在这两个视图中显示出来
第4个回答  2010-06-09
v$开头的都叫动态性能视图,顾名思义就是数据库启动以来的数据,都保存在内存中。如果数据库重启了,那这些视图里的内容就全部丢失了。
第5个回答  2010-06-09
本视图持续跟踪所有shared pool中的共享cursor,在shared pool中的每一条SQL语句都对应一列。本视图在分析SQL语句资源使用方面非常重要。存储的SQL 和一些相关的信息,比如累计的执行次数,逻辑读,物理读等统计信息,例如:HASH_VALUE:SQL语句的Hash值。
ADDRESS:SQL语句在SGA中的地址。
这两列被用于鉴别SQL语句,有时,两条不同的语句可能hash值相同。这时候,必须连同ADDRESS一同使用来确认SQL语句。
PARSING_USER_ID:为语句解析第一条CURSOR的用户
VERSION_COUNT:语句cursor的数量
KEPT_VERSIONS:
SHARABLE_MEMORY:cursor使用的共享内存总数
PERSISTENT_MEMORY:cursor使用的常驻内存总数
RUNTIME_MEMORY:cursor使用的运行时内存总数。
SQL_TEXT:SQL语句的文本(最大只能保存该语句的前1000个字符)。
MODULE,ACTION:使用了DBMS_APPLICATION_INFO时session解析第一条cursor时的信息

而v$sqltext有个很得要的用途是,它中有内存中完整的sql语句,可以查看内存中的情况!
相似回答