oracle优化------缓存对象与数据(7)
SQL> exec dbms_shared_pool.keep(000000008E8532A8,97348712);
begin dbms_shared_pool.keep(000000008E8532A8,97348712); end;
ORA-01426: 数字溢出
ORA-06512: 在 "SYS.DBMS_UTILITY", line 114
ORA-06512: 在 "SYS.DBMS_SHARED_POOL", line 45
ORA-06512: 在 "SYS.DBMS_SHARED_POOL", line 53
ORA-06512: 在 line 1
SQL> exec dbms_shared_pool.keep(000000008E8532A8,97348712,C);
PL/SQL procedure successfully completed
SQL>
检查是否被keep住
SQL> select oc.KEPT,sq.ADDRESS,sq.HASH_VALUE
2 from v$db_object_cache oc,
3 v$sqlarea sq
4 where sq.SQL_TEXT=oc.NAME
5 and sq.HASH_VALUE=97348712
6 ;
KEPT ADDRESS HASH_VALUE
---- ---------------- ----------
YES 000000008E8532A8 97348712
SQL>
取消对象的keep
SQL> exec dbms_shared_pool.unkeep(000000008E8532A8,97348712,C);
PL/SQL procedure successfully completed
SQL>
确认当前匿名块是否被取消keep
SQL> select oc.KEPT,sq.ADDRESS,sq.HASH_VALUE
2 from v$db_object_cache oc,
3 v$sqlarea sq
4 where sq.SQL_TEXT=oc.NAME
5 and sq.HASH_VALUE=97348712
6 ;
KEPT ADDRESS HASH_VALUE
---- ---------------- ----------
NO 000000008E8532A8 97348712
SQL>
剩下keep住package和sequnce就都类似了
共享池碎片问题
绑定变量问题
-----end-----
cursor分为:1.缓存打开的游标--可以从v$open_cursor,2.查到缓存关闭的游标,3.未被缓存打开的游标 。session_CACHED_CURSORS正是缓存关闭的游标; OPEN_CURSORS 是包括缓存打开的游标和未被缓存打开的游标(可以从v$sesstat 查到)。 假如session_CACHED_CURSORS=200,缓存200个关闭游标,而open_cursor=100,允许最大打开100个游标,缓存用的就不是很充分,而这些缓存资源又是非常宝贵的,所以如果缓存太多的游标占用的资源太多,反而起副作用。
相关新闻>>
- 发表评论
-
- 最新评论 更多>>