日期:2014-05-16  浏览次数:20447 次

Oracle 性能调优学习笔记(五)-- buffer Cache调优B

诊断工具
?????? 动态视图
?????v$buffer_pool_statistics
?????v$buffer_pool
?????v$db_cache_advice
?????v$sysstat
?????v$sesstat
?????v$system_event
?????v$session_wait
?????v$bh
?????v$cache
?????? Statpack
????OEM的调优使用
???性能指示标志
?????? 减少下面3个指标的信息
????Free buffer Inspected(检查):Sp检查LRU中是否有空闲buffer,等待时间.
????Free buffer wait(等待):DBWR写数据,sp的等待.
????Buffer busy waits:多个sp在使用同一个bock,sp等待.
????
???? select name ,value from v$sysstat
???????? where name='free buffer inspected';
???
???select event,total_waits
???????? from v$system_event
?????? where event in
?????? ('free buffer waits','buffer busy waits');
???查找比较忙的块
???select * from v$event_name
????where name='buffer busy waits'
???buffer Cache的类型:
????? 默认buffer cache:
????? Keep buffer cache:
????? Recycle buffer cache:
????? nk buffer cache:
???????????
???buffer 竞争等待原因
????数据块:
?????? sql查询不精确
?????? 使用索引左边相同造成.
?????? v$session_wait提供文件和数据块的频繁等待.
???????????? UNdo?
????? 非自动的undo表空间管理,需要增加回滚块.
????
???????????? 空闲buffer 等待原因
?????? DBWn赶不上脏数据增加.
?????系统IO比较忙. 换磁盘
?????IO等待资源如锁. 换磁盘,调整文件分布
?????buffer cache很小. 增大buffer cache
?????buffer cache很大,DBWN处理很忙.? 开启多个DBWn
???????????? 计算Cache命中率
????? Oracle 9I
????? select 1-(phy.value -lob.value-dir.value)/ses.value "Cache Hit Ratio"
??????? from v$sysstat ses,v$sysstat lob, v$sysstat dir ,v$sysstat phy
???? where ses.name='session logical reads'
???? and dir.name='physical reads direct'? --直接从磁盘读取
???? and lob.name='physical reads direct(lob)'? --不需要buffer cache中获取
???? and phy.name='physical reads';? --总的磁盘读取数
????
???? Oracle 11g
??????? consistent gets from cache:从buffer cache中获取的block的次数
???? db block gets from cache: 当前块从buffer cache中请求的次数.
???? physical reads cache:总的数据块从磁盘到buffer cache的次数.
???? select name,value
??????? from v$sysstat
????? where name in('db block gets from cache','consistent gets from cache',
????? 'physical reads cache');
?????
????命中率: 1-(('physical reads cache')/('db block gets from cache'+'consistent gets from cache'))
?????????? 影响命中的因素
??????? 数据访问方式影响
????? 1.全表扫描
????? 2.数据或者应用的设计问题
????? 3.大表的随即访问
????? 4.不均匀的缓存命中率分布
???命中率不是一切
?????????? 在命中率调整时候,需要查看v$db_cache_advice和命中率.
????多次读取比较大的表或者索引的时候,会降低命中率.可以
????将反复使用的数据缓存在中间层或者应用程序中.Oracle全表
????扫描信息将block放在LRU尾部.因此可能尽快的出局.
????? 命中率是调优的一部分.
????? 命中率并不决定数据是否需要调优.