oracle温故知新--buffer cache(二)工作原理

 一、severver与bufffer cache之间数据交互

     13824386_201106161231181.jpg

 1) 第一步,server process 通用过hash函数得到hash值,判定请求块是否在于buffer cache里;
         如果找到了,会移动到LUR算法开头;这种操作是逻辑读;返回给server process;
         如果找不到,server process直接从数据文件读取数据块; (Server process主动将Dirty buffer从LRU List移动到Dirty List)
     2) 在从数据文件读取数据块之前,server process从LRU list查找空闲buffer;同时会把已发现的所有Dirty buffer
        从LRU List移动到Dirty List(Checkpoint Queue)中去,以便写到磁盘上
     3) 当checkpoint queue队列超过限制时,severr process唤醒DWWn把脏数写到碰盘上;

  (Checkpoint Queue阀值到达,导致Server Proceess通知DBWn写赃数据)
    这个阀值是25%,当然这也是触发我们DBWn进程的一个条件

    SQL> select kvittag,kvitval,kvitdsc from x$kvit
         where kvittag='kcbldq';

    KVITTAG                                                             KVITVAL
    ---------------------------------------------------------------- ----------
    KVITDSC
    ----------------------------------------------------------------
    kcbldq                                                                   25
    large dirty queue if kcbclw reaches this

     4)severr process扫描了LRU超过一个阀值也没有找到足够的Free的buffe
      、Server process触发DBWN进程开始写脏数据块;Server process会处于free busy wait的等待事件.这个阀值是40%,同时这还是触发我们DBWn进程的一个条件

SQL> select kvittag,kvitval,kvitdsc from x$kvit
         where kvittag='kcbfsp';

    KVITTAG                                                             KVITVAL
    ---------------------------------------------------------------- ----------
    KVITDSC
    ----------------------------------------------------------------
    kcbfsp                                                                   40
    Max percentage of LRU list foreground can scan for free 

5)同时,因为Checkpoint Queue的引入,DBWn还会主动的扫描LRU List,将我们发现的Dirty Buffer从LRU List移动到checkpoing queue,扫描LRU List的范围是25%.
   (DBWn主动扫描LRU的25%,依照结果从LRU中移动Dirty Buffer到Dirty List中,)
    SQL> select kvittag,kvitval,kvitdsc from x$kvit
         where kvittag='kcbdsp';

    KVITTAG                                                             KVITVAL
    ---------------------------------------------------------------- ----------
    KVITDSC
    ----------------------------------------------------------------
    kcbdsp                                                                   25
    Max percentage of LRU list dbwriter can scan for dirty
     6)如果找到一空间buffer ,server process 从数据文件中读取数据块到buffer cache中.server process 同 时把数据块移动到LRU

二 唤醒DBWn进程工作条件

   1.checkpoint queue 超过了阀值;
       2.severr process扫描了LRU超过一个阀值也没有找到足够的Free的buffe
       3.Alter tablespace offline or Alter tablespace begin backup;
       4.drop a segment;
       5.clear shutdown;

三 调优目标和手段

 目标:1.severr process在内存里找到数据
            2.没有buffer cache 等待事件
      调整指标:
            1.wait event
            2.cache hit ratio
            3.v$db_cache_advice
      调优手段:增大尺寸,使用多种buffer pools,固化到内存,一些排序直到读到内存里

fj.pngbuffer cache工作原理.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13824386/viewspace-700011/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/13824386/viewspace-700011/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值