ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle温故知新--buffer cache(二)工作原理

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

原创 Linux操作系统 作者:bbs159 时间:2011-06-16 12:20:13 0 删除 编辑

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

    

 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,固化到内存,一些排序直到读到内存里

buffer cache工作原理.jpg

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

请登录后发表评论 登录
全部评论

注册时间:2011-05-11

  • 博文量
    26
  • 访问量
    41951