oracle优化------缓存对象与数据(4)
时间存在将可以减少SQL分析的发生。有2个参数可以控制SQL在SESSION缓冲池中的时间长短:OPEN_CURSORS和SESSION_CACHED_CURSORS。
那怎样来调整这两个参数呢?检查目前SESSION_CACHED_CURSORS和OPEN_CURSORS的使用率情况
select session_cached_cursors parameter,
lpad(value, 5) value,
decode(value, 0, n/a, to_char(100 * used / value, 990) || %) usage
from (select max(s.value) used
from v$statname n, v$sesstat s
where n.name = session cursor cache count
and s.statistic# = n.statistic#),
(select value from v$parameter where name = session_cached_cursors)
union all
select open_cursors parameter,
lpad(value, 5) value,
to_char(100 * used / value, 990) || % usage
from (select max(sum(s.value)) used
from v$statname n, v$sesstat s
where n.name in
(opened cursors current, session cursor cache count)
and s.statistic# = n.statistic#
group by s.sid),
(select value from v$parameter where name = open_cursors);
查看系统级cursor的命中率,软分析和硬分析的比率
select
to_char(100 * sess / calls, 9999990.00) || % cursor_cache_hits,
to_char(100 * (calls - sess - hard) / calls, 999990.00) || % soft_parses,
to_char(100 * hard / calls, 999990.00) || % hard_parses
from
( select value calls from v$sysstat where name = parse count (total) ),
( select value hard from v$sysstat where name = parse count (hard) ),
( select value sess from v$sysstat where name = session cursor cache hits );
如果返回SESSION_CACHED_CURSORS缓冲区的使用率是100%,那么说明SESSION_CACHED_CURSORS参数还不够大,如果共享池的大小足够,可以调整该参数,直到使用率低于100%为止。
对于没有使用绑定变量的系统,如果CURSOR_SHARING设置为EXACT的时候,如果设置SESSION_CACHED_CURSORS的时候要十分注意,由于应用原因,CURSOR的重用率十分低,如果设置过高的SESSION_CACHED_CURSORS,会导致共享池空间被大量占用,在系统负载较高的时候会出现共享池的性能问题。
B。保留大型对象
加载大型对象是造成共享池碎片的主要原因;由于大量的小型对象需要从共享池释放以腾出空间,会影响响应时间
为了避免这样情况发生,我们就把大型的,经常使用的对象keep在共享池中,哪些对象需要keep呢?
1)经常用到的大型对象,如standard等程序包,使用共享内存超过阀值的对象
2)经常在常用表中执行的触发器
3)序列,因为当序列从共享池中释放时,序列号就丢失了
使用命令 alter system flush shared_pool命令刷新共享池,但不刷新保留对象
相关新闻>>
- 发表评论
-
- 最新评论 更多>>