您的位置:首页 > 数据库

Oralce基础知识-实例优化(添加整理中)

2009-01-20 11:05 351 查看
 优化工具:
 --查看并分析等待事件session_wait;
 --会话等待事件,名字中有含有sql,time都是系统事件,不必处理
 select t.SID, t.EVENT,t.P1TEXT,t.P1,t.P2TEXT,t.P2,t.P3TEXT,t.P3,t.WAIT_TIME,t.SECONDS_IN_WAIT,t.STATE
 from v$session_wait t order by t.EVENT;
 --trace文件格式化工具tkprof
 --跟踪sql语句 alter session set sql_trace=true,之后可以用tkprof分析trace文件得到sql语句所耗资源
 --把等待事件计入跟踪文件的方法
 alter session set timed_statistics=true;
 alter session set max_dump_file=unlimited;
 alter session set events '10046 trace name context forever , level X'/*X=1,4,8,12*/
 对于他人的会话:
  sql>select s.username,p.spid from v$session s,v$process p where s.paddr =p.addr and s.username like 'A%';
  sql>oradebug setospid <SPID>;
  sql>oradebug unlimit;
  sql>oradebug event 10046 trace name context forever,level X;
 --查看执行计划 set autotrace traceonly,之后执行sql则显示执行计划

 

一。共享池优化的几种方式及相关脚本

 

1.使用保留池

--设置shared_pool_reserved_size参数,存储大对象,减少reload
--shared_pool_reserved_size是从共享池分出来的一部分内存,通常划出15-20%作为保留池

 

2.在保留池中钉住大对象,减少reload(reload可从v$librarycache视图查到)

--查找大对象(SHARABLE_MEM较大的,v$sqlarea中有同样字段)
select * from v$db_object_cache d where d.OWNER='CRM' order by d.SHARABLE_MEM desc;
--钉住大对象
dbms_shared_pool.keep('Packagename');

 

3.减少分析成本

--使用连接池

--sql中使用绑定变量
--设置cursor_sharing=force,有利有弊
--设置session_cached_cursors(将cursor从shared pool转移到pga中)

 

4.相关脚本

 

--数据字典缓存命中率应大于90%
select 1-sum(getmisses)/sum(gets) from v$rowcache;

--库缓存命中率应大于90%,否则考虑加大共享池(get是请求数目,pin是执行数目)
select l.GETHITRATIO,l.PINHITRATIO from v$librarycache l;

 

--以下脚本监控单个session的解析情况.我们可以看到"softer" soft parse 是怎么产生的
--To show sql's parse infomations by a session when session_cached_cursors parameter has been set--
select a.value,b.name,s.sid, s.serial#
from v$sesstat a, v$statname b, v$session s
where a.statistic# = b.statistic#
and s.sid=a.sid
and b.name in ('opened cursors current','parse count (hard)','parse count (total)','session cursor cache count','session cursor cache hits')
and a.sid=&sid
/
解释一下v$sesstat中相关取值的重要概念
1 > opened cursors current (当前单个session打开的cursors数量)
2 > parse count (hard) (当前session硬解析次数)
3 > parse count (total) (当前session解析总次数)
4 > session cursor cache count (设置session_cached_cursors参数后,"相同"sql被解析3次后被cache在session cursor cache中的数量
5 > session cursor cache hits (软软解析的次数 a "softer" soft parse )

 

二。数据池优化的几种方式及相关脚本

数据池优化笔记:
 默认池db_cache_size、保留池db_keep_cache_size存放常用小段、回收池db_recycle_cache_size存放逻辑物理读取接近的大段
 create table...storage(buffer_pool keep)
 alter table ... cache
 oracle 中v$bh可查object 在内存的情况(关注Objd字段)
 仅当出现free buffer waits时需要加大数据池
 应该设置db_block+lru_latches参数为CPU数的2倍,以减少出现latch free 等待的几率

其他:
 存储子句FREELISTS 10可以减少并发访问时的等待(产生data block类型竞争的主要原因是多个进程试图同时修改free list头部数据块)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息