buffer Cache调优
buffer cache命中率没有共享池的命中率要求那么高.
BD_BLOCK_SIZE:
SGA中两个队列:
LRU lists:监控buffer cache的使用.基于访问次数和时间的排列.
头部为最近最新(MIU),尾部(LIU)为最旧的数据.实现LRU原则.
buffer cache状态:
Pinned:只能一个个会话同一个时间写同一个块.
Clean:block的内容和磁盘一直,可能有效清除.
Free/unused:buffer没有使用.
Dirty:数据已经改变,需要写到磁盘.
服务器进程使用buffer cache中的buffer.DBWn写完毕数据之后,buffer设置为可用状态.
DB_BLOCK_CHECKSUM设置为true,每一个块将有一个校验码检查,设置参数增加负荷1%-2%.推荐使用.
Checkpoint Queue:每一个都是脏block,数据被datafiles;
buffer cache数据来自datafile,所有的用户共享数据块.
服务器进程从datafile文件中读取block到buffer cache中空闲块.为了提供性能,
可以一次读多个块.DBWn写脏数据写到数据文件中.任何一个时刻,一个buffer cache
可能有多个数据块的拷贝(隔离机制存在).
Cache大小的调整:
buffer cache可以多个子缓存池和多个block size.但是DB_BLOCK_SIZE决定主block大小.
决定system表空间和主buffer cache(recycle,keep,default)大小.
以下参数决定主buffer cache参数的缓存大小.
BD_CACHE_SIZE:
BD_KEEP_CACHE_SIZE:
DB_RECYCLE_CACHE_SIZE:
DB_BLOCK_CHECKSUM:
动态bufer cache advisory:启用之后,收集系统情况.
初始化参数:DB_CACHE_ADVICE开启
ALTER SYSTEM SET DB_CACHE_ADVICE=ON SCOPE=SPFILE;
Oracle推荐可以先有
ALTER SYSTEM SET DB_CACHE_ADVICE=ready SCOPE=SPFILE;
ALTER SYSTEM SET DB_CACHE_ADVICE=on SCOPE=SPFILE;
v$db_cache_advice收集信息的视图:
select size_for_estimate "Cache Size(MB)",
buffers_for_estimate "buffer",
estd_physical_read_factor as "Estd Phys Read Factor",
estd_physical_reads "Estd Phys reads"
from v$db_cache_advice
where name ='DEFAULT'
and block_size=(
select value
from v$parameter
where name='db_block_size'
)
and advice_status='ON';
DBWn管理buffer cache将脏数据写到数据文件中,使用服务器有空闲块.
DBWn相应实例的不同事件,一些事件触发DBWn将block写到磁盘:
1.服务器进程发现checkpoint队列中长度超过一定的限制,通知DBWn写数据.
2.在LRU队列中没有空闲块的时候.
3.执行alter tablespace offline或者alter tablespace begin backup时候.
DBWn将checkpoint对象脏数据写到磁盘上.
4.删除数据块segement的时候.
5.每三秒
6.检查点时间
6.关机时(normal,immediate,transactional)
buffer cache目标:
查找数据在buffer cache 内存中.
在buffer cache中减少等待.
诊断
等待事件(Wait Event)
缓存命中率
优化技术:
减少SQL的全表读扫描.
增加缓存大小.
使用多队中缓存池
排序和并行读不用使用缓存.
常用表(相对比较小的表)缓存到内存中.
Oracle 性能调优学习笔记(五)-- buffer Cache调优A
最新推荐文章于 2021-05-15 14:38:46 发布